leex
Вообще-то шерстить форум надо , уже обсуждалось... document.createXULElement
/*Initialization Code*/ // Добавить подменю "Поиск изображения в" в контекстном меню изображений, от 31.05.2019. ............. (()=> { var copyimage = document.getElementById("context-copyimage-contents"); var contextMenu = copyimage.parentNode; var array = [ ['Google', 'data:image/png;base64,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/GMzLdsAADrvaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjYtYzA2NyA3OS4xNTc3NDcsIDIwMTUvMDMvMzAtMjM6NDA6NDIgICAgICAgICI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE1IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNS0wOS0wOFQwMzo0ODo0NiswNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTUtMDktMDhUMDM6NDg6NDYrMDc6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE1LTA5LTA4VDAzOjQ4OjQ2KzA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDpiZTkyOTY2My03YjRmLWQyNDItYTMwNC1jMzM2ZWYyYWIwZDU8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDpjYmZjNTliZC01NWExLTExZTUtODFjMS04YjlkY2VmYTcxNjk8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo1Y2I5OGU1Zi1iNmNiLWNjNGQtYmE4MS1kNjNmN2VjZWYwYzE8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NWNiOThlNWYtYjZjYi1jYzRkLWJhODEtZDYzZjdlY2VmMGMxPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE1LTA5LTA4VDAzOjQ4OjQ2KzA3OjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmJlOTI5NjYzLTdiNGYtZDI0Mi1hMzA0LWMzMzZlZjJhYjBkNTwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxNS0wOS0wOFQwMzo0ODo0NiswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICAgICA8c3RFdnQ6Y2hhbmdlZD4vPC9zdEV2dDpjaGFuZ2VkPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6U2VxPgogICAgICAgICA8L3htcE1NOkhpc3Rvcnk+CiAgICAgICAgIDxwaG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+CiAgICAgICAgICAgIDxyZGY6QmFnPgogICAgICAgICAgICAgICA8cmRmOmxpPjg4MjFFRjQwOUIwQzc4Mjg5QkM2Nzk4NzMzQjdCODlGPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDxwaG90b3Nob3A6SUNDUHJvZmlsZT5zUkdCIElFQzYxOTY2LTIuMTwvcGhvdG9zaG9wOklDQ1Byb2ZpbGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjMwMDAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjMwMDAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTY8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnhSO64AAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAABMBJREFUeNrElT1sHEUUx387Nzs3vtvbW9+d44viEGPACSYCBPmg4EsgUKAhaUgBEpGgCQgKoogPCUGLoKCAkkRKR6wQqAAJAhEQmYYESIMREFlgzo5zOZy9vb3ZuR2KBYkudEwxzTy9mXn/3/s/zznnnON/W/K/Bt58y/zxkXXOGChJaDQyC7C05AEwHiXJSgcurkk52YbOH08cAM+7Wl5xtYAdOz/8AJyDOM5zKAkhAC6uKgVQD0e5yyGOrZ1sQz1MEoCJibfeGiRXr633jwS7d3/yMTg3SAdpnkMQGCMEdLu+BNi5QymXw913zc56AsYb1nY6MEiEmNwAiz9l1hPw6afnzw9T+PmXJClrSNNBAlASQwOQJMMUYDh86WXwPG/nrpMnnXNukLjcGFBqkCoF/cSXmYF9e2dmPAHNprUrHTh69O133jsOy8uLi50V6PXS1AP27NmzZ8ftsH//44898CC8f3JxsRbA56fW1kY5HD68dVs/hv2Pbt9eDWDX7qNHlAKZmczkOQghhFIQxyXRj2F2dqxiDExvSdOyhkOHnz/0yqtgjLWNBoAnMgNQj7SGz04tLFzqwq8X/lw/dw5efOHZZ+66Ez4/9eVXSsHp04uLqgG//Z4kLgetrQWQ3W5mhYB6JCVAnqdpNYCbtk9PV4H5E/Mnjh0DECKKIDPGFBdH0caN4Il62G5DZkZ5ScDvv11cXV+H5eULF5aX4bbbhMhzOHvucndqCs6cWV8vScisrwCklAWocZymRWKHr8CXWl9ag6WlS2sXV4unVSpQC7VuNWGQaH3tNFhrrSeKcw8Iw7FKPYLOirW+glbLl3/2oB/7qiRBqWEax2CtlEEAwphBai34UghfFTRnBlrNUd5sQatVCzdNQT8OgsY4DNPxRrMBo1zregRSghCg1FglCGCUC2EtTDSl1BqkLB7uKOCLYxjTUJKFBMKYkpAS4tgYgAI9OPtdp+Ny2PfI3kfuvw/KWqmJFtTCRkNrECIIkgQctVBriKJ22xiYmdlyTbsNc3PXzkQRLCz89PMfHahUpOzHEASeEAKsrQZ5DsLRTzLD3zv0k6J0X3yxtJSmkCSTG+oRPPfc0wfvuRemphqN6WkIQ2N8Cc3GeBSGcOPcls3btsFTTz780NZZ+PiTs99+swArq2HtupkC3mpQfNQTEATDVAjwpHz9deec2zSllLWFkoWxFJJoPcqNgQMHdu8qCdi2VesrMfR6SVKpgC+l7PWgFgaBtfDRR1+fWV2Fkx98/4MHCDG16ZZbiy4zBq6sD5Ki+GVdqYC3ZfrNN65ccW5tzZgggMxoXTRZmloLUkopJYzpJOl2YWKDUmkKQozyflzACtDpJIkxcKmbuzAEj7Hy5mtAiAJRY/p9AF9VqwBaGzOyUApD6WfZa69F9bm5O+6AaDyKymUol8vly11oNYXwgJKshWEIxjTGazUApapV6Pd92WpCmlYrk21oNStj1SrUakoZA1GkfClhYqLRHCRQC0qlLANrPzt18Ol/WfH1N+zdd/Cgc2laeH4tqIfWgjH9pKC8MKqhGdnLPfBlNdAajBmmHlANpBQCXG7M5V4xsArfAGOgnxQNP6a1Lkn48cf5+SPvep73f4/jvwYAdVc8ZTQlaYQAAAAASUVORK5CYII=', 'https://www.google.com/searchbyimage?&image_url='], ['Яндекс', 'http://yastatic.net/morda-logo/i/favicon_islands.ico', 'http://yandex.ru/images/search?rpt=imageview&img_url='], ['Bing', 'https://www.bing.com/s/a/bing_p.ico', 'http://www.bing.com/images/searchbyimage?FORM=IRSBIQ&cbir=sbi&imgurl='], ['Tineye', 'https://tineye.com/favicon.ico', 'http://tineye.com/search?pluginver=bookmark_1.0&url='], ]; var menu = contextMenu.insertBefore(document.createXULElement("menu"), copyimage); menu.setAttribute("label", "Поиск изображения в ..."); menu.setAttribute("class", "menu-iconic"); menu.setAttribute("image", array[0][1]); menu.onclick =e=> { e.target.nodeName == 'menu' && search(array[0][2]); setTimeout(()=> contextMenu.hidePopup(), 20) }; addEventListener("popupshowing", ()=> menu.hidden = copyimage.hidden, true, contextMenu); addDestructor(()=> contextMenu.removeChild(menu)); var menuPopup = menu.appendChild(document.createXULElement("menupopup")); array.forEach(m=> { var mItem = menuPopup.appendChild(document.createXULElement("menuitem")); mItem.setAttribute("label", m[0]); mItem.setAttribute("image", m[1]); mItem.setAttribute("class", "menuitem-iconic"); mItem.onclick =()=> search(m[2]); }); function search(finder) { gBrowser.selectedTab = gBrowser.addTrustedTab(finder + encodeURIComponent(gContextMenu.imageURL)) }; var mItem = menuPopup.appendChild(document.createXULElement("menuitem")); mItem.setAttribute("label", 'Искать во всех поисковиках'); mItem.onclick =()=> { array.forEach(m=> { gBrowser.selectedTab = gBrowser.addTrustedTab(m[2] + encodeURIComponent(gContextMenu.imageURL)) }) }; })(); (frameScript => { this._handleClick = () => addTab("https://www.pinterest.ru"); this.oncontextmenu = e => e.ctrlKey || e.shiftKey || addTab("https://www.pinterest.com") || false; var addTab = url => { var tab = gBrowser.selectedTab = gBrowser.addTab(url, { triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal() }); var browser = tab.linkedBrowser; setTimeout(function wait() { if(browser.currentURI.spec == "about:blank" || browser.webProgress.isLoadingDocument) setTimeout(wait, 25); else browser.messageManager.loadFrameScript(frameScript, false); }, 0); } })( "data:,content.document.documentURI.startsWith('about:neterror')&&(wn=>wn.reload(wn.LOAD_FLAGS_BYPASS_PROXY" + "|wn.LOAD_FLAGS_BYPASS_CACHE))(docShell.QueryInterface(Components.interfaces.nsIWebNavigation))" );
Отсутствует
Сделал, но autopopup не работает при наведений(отдельный js код) раньше при наведений все сразу открывалось без клика.
А вот в кнопке "Insert special symbol" рабоает autopopup, но там какойто дополнительный код:
"this.prepend(popup);})(document.createElementNS(xulns,"menupopup"));" вместо "})(this.appendChild(document.createElement("menupopup")));"
// Быстрое переключение параметров about:config от 24.07.2016 this._handleClick=()=>menuPopup.openPopup(this,"after_start"); var menuPopup=self.appendChild(document.createXULElement("menupopup")); menuPopup.id='quick-aboutconfig-menupopup'; // Изменить иконку при несоответствие любого параметра пользовательскому предпочтению (см.ниже)||Иконка меняется только при изменеии параметров через меню кнопки, либо после его открытия. var s='CB.hasNotUserChoice';function toggleImage(){var val=custombuttons.getPrefs(s);self.image=val //var s='CB.hasNotUserChoice';function toggleImage(){ custombuttons.getPrefs(s)?self.style.cssText='':self.style.cssText='filter:grayscale(100%)';}; ? 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB6klEQVQ4jZWTv2tUQRDHv8ntd28GLLQQfwS5VkuDSgRF/wlRiIiCQQQhhZ1VII1/wDUWkkLTBAsbC0FJYZGQ3NuZRcHYW6UQEQzoeXkW791xXh5CptodZr8z85kd4BBWRJwDgB5wyoCjh3mLbfK8C/ddW11XJlduNgYaeTFpvJWA0+P+BBx3Cf2sLEy5m4WrS8A0AGANaBUSrgKAKzdcY5k0PF4HJGm47NK6nSUMXOIXAEgSrrnG0oU/AGDKNb6qHe9c+Ms1lqbxqws/uoTfWVp3ksRll/DTJM6bcMWEn1KbDysBCW+zsnSNpWssTbg3PNf3uw7MuHDgym8uoW8aX496SxKXs7J0iTsFObcGRBfey8rShP1EXthSnDHhShJ0vM0H1uYiAKBSHWZqLYyDc+H7sSpeNlMX9l1jWWebEAgjgSxcbRRYB46YhCcVxH9bqDP3nbyUBB0XPk+Cjgnvj1qoqohvJqDtTUBdcGAmSzgIEQBM2R0fY/U41GPkwNpcTBKfmnDPNN4w4TOX+NnbfAQAWAKmXcMVAMgaNqrM1UfqkbMmrXkT/nGJO1XF4Xod8/0Ak4KcKzTe3AROjPs/AMdM2M8atk25a8IXAKYawTZZj5jNEvZN2TVldg3Ny/RfkYizALAFnByu819tzvCRWXKqTwAAAABJRU5ErkJggg==' : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAACXBIWXMAAABnAAAAZwHVKNQmAAADGGlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjaY2BgnuDo4uTKJMDAUFBUUuQe5BgZERmlwH6egY2BmYGBgYGBITG5uMAxIMCHgYGBIS8/L5UBA3y7xsDIwMDAcFnX0cXJlYE0wJpcUFTCwMBwgIGBwSgltTiZgYHhCwMDQ3p5SUEJAwNjDAMDg0hSdkEJAwNjAQMDg0h2SJAzAwNjCwMDE09JakUJAwMDg3N+QWVRZnpGiYKhpaWlgmNKflKqQnBlcUlqbrGCZ15yflFBflFiSWoKAwMD1A4GBgYGXpf8EgX3xMw8BUMDVQYqg4jIKAX08EGIIUByaVEZhMXIwMDAoM2Qw7CDkY8xi/EskynTYmYR5i4WFpZGVibWNjYetmnsyuybOVw5bnIWcHFyLeV24n7E08KrwXuOr4xfnv+0QIWguuANoS5hO+EvIqtFU8TkxW6Jz5AIlxSXvCE1RzpBRk3mrexWuXp5LwUxhSeKm5SalENU1FR+qp5TW6JerRGsqaPFpvVIe5/ObN0qvSh9KwMZg3+Gj4yOG68xmWxaZZZs7mNhbqlkxWf12/qlzQ3bE3Y77Vc7zHWc6NTqXOVS4JruFuce7hHg6eXl6u3oY+dr7WfpbxFgEWgRZBlsHWIX6hTmFu4dERgZHhUfnR5TEFsZ1xzflzArcVnS5uSDKedT76W9S/+XKZClmG2S454bnZef31owq3Bj0YniByU/ygTLtStcKxOqaqpn1GytvVT3oYG/Ua/Jrzm/ZULrprYr7d87pbvsu5N7OnvX9V3t/zNRZZLP5JIp86aemPZphuxMz1mlsxfOOT/3z3ztBVELOxftXPxqqfQyn+V1KzaufLJaYo3P2sZ129a/2ai0KXLzxC0ntjFut9pRvHPtrhd7lPbG7Zu1/9pB4UOBh/uPnD3Gc9z7RPfJM6d5zvidnXDu0gXRixGX5lx+cFXlWtb19Te+3rK53Xzn1D2h+9EPljx8+9j8SePTM8/FXyS9XPfq9xuPt1PfPf5g+LHh0/kv8l/zv+3/IfAz6deWP2x/I/6t/v8fAATCIM0IpJTRAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAEOSURBVHjabJGtS0MBFMXPJojBMMPwC1nV6FCZoGj/ZVGYiIJDBOEFm3XFP2DFIAu6ZrAYBM0OREEUnN20ICI40OfbsTzYB48b7oF74J4PWUnDjMU4GSv5PEubCo/UuwjMs8FEjLOEPNCkRloWAyxb3GEOGWKRTSLeLFYwXyLFBeaGH8w7z/yyRZlvilR5YV+kuMYY04r3NpNEfBByaYksZUyDAoPsYELmmKJKjj0CS0QYU4rl3WLMeceRCBMItW7CMEd9LxbIcUqOXQJLFld9Iks9Ii0qPTYjAo5pscYJrxzIIs1SV1B5ivzRsFjFfHaiLrDOaIxHCLmnyRmp5LLytKnw1FNWH2XaYoyM9T8AOvnw3YUOg90AAAAASUVORK5CYII=';}; toggleImage();Services.prefs.addObserver(s,toggleImage,false); addDestructor(()=>Services.prefs.removeObserver(s,toggleImage)); // nodeName: menuitem - для логических(boolean) параметров, menu - для целых(integer) и строковых(string). menuseparator - для разделителя. // pref - параметр about:config. // Параметры имеющие значения отличные от дефолтных - выделены жирным стилем текста. // restart (задавать с пустым значением. т.е., restart: "") - добавляет возможность перезапуска браузера // (с подтверждением в диалоговом окне) после изменения параметра. // key - задает accesskey - клавиши для быстрой навигации по меню. // userChoice - задает предпочитаемое значение и если текущее значение с ним не совпадает, пункт меню/название меню помечаются красным цветом. // Также можно установить предупреждающую иконку для таких пунктов. См. стиль в посте ккнопки. // А также меняется иконка самой кнопки (см. выше). // strValues - значения и отображаемое в меню название значения. Задавать для целых(integer) и строковых(string) параметров. // Задается в виде: значение,,,название,,,accesskey|||значение2,,,название2,,,accesskey2|||значение3,,,название3 и т.д. (accesskey - задается опционально) // Полное значение отображается в подсказках, при наведении на название подменю/пункт подменю. // Для логических(boolean) - отображается сразу после самого параметра (значение true - также ставит галочку для него). // ЛКМ по пунктам меню - перключает значения для логических(boolean) параметров, // любая кнопка по пунктам в субменю - задает это значение для целых(integer) и строковых(string) параметров. // ПКМ по пунктам меню и названию субменю - сбрасывает значение параметра в дефолтное. // Клавиатура: Enter - переключение параметра. // Спецклавиша вызова контекстного меню / Shift+Enter - сброс в дефолтное значение. // Alt + M - открыть меню кнопки. (Сочетание можно сменить на свое. См. в конце кода) [ //{nodeName:"menuitem", name:"Откл. дискового кэша", pref:"browser.cache.disk.enable", userChoice:"false"}, //{nodeName:"menuitem", name:"Откл. кэша в оперативной памяти", pref:"browser.cache.memory.enable", userChoice:"false"}, //{nodeName:"menuseparator"}, //{nodeName:"menuitem", name:"Откл. локального хранилища DB (Storage)", pref:"dom.indexedDB.enabled", key:'d'}, //{nodeName:"menuitem", name:"Откл. локального хранилища", pref:"dom.storage.enabled", key:'s'}, //{nodeName:"menuseparator"}, //{nodeName:"menu", name:"Back-story-cash [Tessssttt]", pref:"browser.sessionhistory.max_total_viewers", strValues:"0,,,0"}, //{nodeName:"menu", pref:"image.animation_mode", key:'i', userChoice:"none", strValues:"normal,,,Анимация картинок вкл.,,,|||none,,,Анимация картинок выкл.,,,"}, //{nodeName:"menu", pref:"network.cookie.cookieBehavior", key:'k', userChoice:"1", strValues:"2,,,Не принимать куки с сайтов,,,|||0,,,Принимать куки со сторонних сайтов всегда,,,|||3,,,Принимать куки со сторонних посещённых сайтов,,,|||1,,,Принимать куки со сторонних сайтов никогда,,,"}, //{nodeName:"menuseparator"}, //{nodeName:"menu", pref:"general.useragent.locale", key:'l', restart:"", strValues:"en-US,,,English,,,e|||ru,,,Русский,,,r"}, //{nodeName:"menu", name:"language", pref:"intl.accept_languages", strValues:"en-US, en;q=0.5,,,en-US, en;q=0.5,,,e|||en-US, en, ru-RU, ru,,,en-US, en, ru-RU, ru,,,r"}, //{nodeName:"menu", pref:"browser.display.document_color_use", key:'c', userChoice:"0", strValues:"0,,,Automatic,,,0|||1,,,Always,,,1|||2,,,Never,,,2"}, //{nodeName:"menu", pref:"CB.TEST", key:'t', userChoice:"C:\\Downloads\\TEST1", strValues:"C:\\Downloads\\TEST1,,,TEST1,,,1|||C:\\Downloads\\TEST2,,,TEST2,,,2"} //{nodeName:"menuseparator"}, //{nodeName:"menuitem", name:"Откл. инфу начало/конец загрузки стр", pref:"dom.enable_performance", userChoice:"false"}, //{nodeName:"menu", name:"Вкл/Выкл Referer", pref:"network.http.sendRefererHeader", strValues:"0,,,0"}, //{nodeName:"menuitem", name:"В качестве реферера корень сайта", pref:"network.http.referer.spoofSource", userChoice:"true"}, //{nodeName:"menu", name:"referer.trimmingPolicy", pref:"network.http.referer.trimmingPolicy", strValues:"2,,,2"}, //{nodeName:"menuseparator"}, //{nodeName:"menu", name:"On/Off Image", pref:"permissions.default.image", userChoice:1, strValues:"2,,,Off"}, //{nodeName:"menuitem", name:"On/Off Multiprocessing", pref:"browser.tabs.remote.autostart", restart:"", userChoice:"true"}, //about:support=Multiprocess Windows|forum.ru-board.com/topic.cgi?forum=5&topic=49695&start=0&limit=1&m=9#1 //opennet.ru/opennews/art.shtml?num=50691 //{nodeName:"menuitem", name:"On/Off javascript", pref:"javascript.enabled", key:'j', userChoice:"true"}, //{nodeName:"menuitem", pref:"dom.workers.enabled", key:'w', userChoice:"false"}, //{nodeName:"menuitem", pref:"media.autoplay.enabled", key:'m', userChoice:"false"}, //{nodeName:"menu", name:"Stopautoplay", pref:"media.autoplay.default", userChoice:0, strValues:"0,,,Stop,,,0|||1,,,Play,,,1"}, //{nodeName:"menuitem", pref:"xpinstall.signatures.required"}, //Check is compatibility //{nodeName:"menuitem", pref:"browser.bookmarks.autoExportHTML"}, //BookmarksHtml [false=places.sqlite] //{nodeName:"menuitem", pref:"media.peerconnection.enabled"}, //WebRTC false=off! {nodeName:"menuitem", name:"On/Off useragentS", pref:"general.useragent.site_specific_overrides", userChoice:"true"}, {nodeName:"menuitem", name:"On/Off media.play-stand-alone", pref:"media.play-stand-alone"}, //сразу скачивать медиафайлы, без перехода на новую страницу. {nodeName:"menuseparator"}, {nodeName:"menu", name:"Configure Proxies", pref:"network.proxy.type", userChoice:5, strValues:"1,,,httpP,,,1|||2,,,AutomaticP,,,2|||5,,,Use systemP,,,5"}, {nodeName:"menu", name:"AutomaticP", pref:"network.proxy.autoconfig_url", strValues:"file:///X:/FFQ/_.pac,,,file:///X:/FFQ/_.pac,,,1|||https://antizapret.prostovpn.org/proxy.pac,,,https://antizapret.prostovpn.org/proxy.pac,,,2"}, {nodeName:"menuseparator"}, //userChoice:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:57.0) Gecko/20100101 Firefox/99.0", {nodeName:"menu", name:"User Agent", pref:"general.useragent.override", key:'u', strValues:"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0,,,Firefox 60/MacOSX 10.13|||Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36,,,Chrome 66/MacOSX 10.13.5|||Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36,,,Chrome 57/MacOSX|||Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30,,,Safari Generic/MacOSX|||Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36,,,Chrome57/W7|||Opera/9.80 (Windows NT 6.2; Win64; x64) Presto/2.12 Version/12.16,,,Opera12/W8|||Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Safari/537.36,,,Chrome61/W10|||Mozilla/5.0 (Linux; Android 7.0; PLUS Build/NRD90M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36,,,Chrome61/Android7|||Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html),,,GoogleBot|||Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots),,,YandexBot|||Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp),,,YahooBot|||Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm),,,BingBot|||DuckDuck bot/1.0; (+http://duckduckgo.com/duckduckbot.html),,,DuckDuckBot|||Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html),,,BaiduspiderBot|||ia_archiver (+http://www.alexa.com/site/help/webmasters; crawler@alexa.com),,,AlexaCrawlerBot|||Mozilla/5.0 (Linux; Android 5.1.1; SM-G928X Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36,,,Samsung Galaxy S6 Edge Plus|||Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Microsoft; Lumia 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/13.10586,,,Microsoft Lumia 950|||Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Xbox; Xbox One) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Mobile Safari/537.36 Edge/13.10586,,,Xbox One|||Mozilla/5.0 (PlayStation 4 3.11) AppleWebKit/537.73 (KHTML, like Gecko),,,Playstation 4|||,,,Пустое значение"}, ] .forEach(function(m){var mItem=document.createElementNS(xulns,m.nodeName);var browserRestart=''; if("restart"in m)browserRestart='if(custombuttons.confirmBox(null,"Restart?","Yes","Cancel"))Services.startup.quit(Services.startup.eAttemptQuit|Services.startup.eRestart);'; if("name"in m) mItem.setAttribute('name',m.name); if("pref"in m){mItem.setAttribute('closemenu','none'); mItem.setAttribute('oncontextmenu','event.preventDefault();custombuttons.clearPrefs("'+m.pref+'");'+browserRestart);} if("key"in m) mItem.setAttribute('accesskey',m.key); if(m.nodeName==="menuitem"){mItem.setAttribute('type','checkbox'); mItem.setAttribute('oncommand','custombuttons.setPrefs("'+m.pref+'",!custombuttons.getPrefs("'+m.pref+'"));if(event.shiftKey&&event.keyCode==event.DOM_VK_RETURN){event.preventDefault();custombuttons.clearPrefs("'+m.pref+'")};'+browserRestart);} if(m.nodeName==="menu"){mItem.setAttribute('class','menu-iconic'); var subMenu=mItem.appendChild(document.createXULElement("menupopup")); for (var value of m.strValues.split('|||')){var submItem=document.createXULElement("menuitem"); var smVal=value.split(',,,')[0]; var smValConv=convertFromUnicode("UTF-8",smVal); var smName=value.split(',,,')[1]; var key=value.split(',,,')[2]; key&&submItem.setAttribute('accesskey',key);submItem.setAttribute('type','radio'); submItem.setAttribute('label',smName);submItem.setAttribute('tooltiptext',smVal); submItem.setAttribute('closemenu','none'); submItem.setAttribute('oncommand','try{custombuttons.setPrefs("'+m.pref+'","'+smValConv.replace(/\\/g,'\\\\')+'")}catch(e){Services.prefs.setIntPref("'+m.pref+'","'+smValConv+'")};'+browserRestart); subMenu.appendChild(submItem);}} menuPopup.appendChild(mItem); // Листенеры отслеживающие переключение параметров // и устанавливающие соответствующие названия и чекбоксы для пунктов меню при открытии меню и кликах for (var type of ['command','popupshowing','contextmenu']){addEventListener(type,(e)=>{setTimeout(()=>{if ("pref" in m){var val,def; def=Services.prefs.prefHasUserValue(m.pref); try {val=Services.prefs.getComplexValue(m.pref,Ci.nsISupportsString).data;} catch(e) { if (Services.prefs.getPrefType(m.pref)==64) val=custombuttons.getPrefs(m.pref).toString();else val=custombuttons.getPrefs(m.pref);} def ? mItem.style.setProperty('font-weight', 'bold', 'important') : mItem.style.removeProperty('font-weight');} if (m.nodeName==='menuitem'){mItem.setAttribute('checked',val);mItem.label=(mItem.hasAttribute('name') ? mItem.getAttribute('name') : m.pref)+' - "'+val+'"'; if ("userChoice" in m){try {var usrChc=(val.toString()===m.userChoice)} catch(e) {usrChc=false}; mItem.setAttribute('user-choice',usrChc);usrChc ? mItem.style.removeProperty('color') : mItem.style.setProperty('color','orangered','important');}} if (subMenu){for (var smitem of subMenu.getElementsByTagName('menuitem')) {var smval=smitem.getAttribute('tooltiptext');smitem.setAttribute('checked',(val===smval) ? true : false);}} if (m.nodeName==="menu") {var vname; try {vname=subMenu.getElementsByAttribute('checked','true')[0].getAttribute('label');} catch(e) {if (!Services.prefs.prefHasUserValue(m.pref)) vname='Default';else vname='Other';} mItem.setAttribute('label',(mItem.hasAttribute('name') ? mItem.getAttribute('name') : m.pref)+' - "'+vname+'"'); mItem.setAttribute('tooltiptext',val || 'This preferences has null value or does not exist.'); if ("userChoice" in m) {var smUsrChc=(val===m.userChoice.toString());mItem.setAttribute('user-choice',smUsrChc); smUsrChc ? mItem.style.removeProperty('color') : mItem.style.setProperty('color','orangered','important');}} if ("userChoice" in m) {var hasNotUserChoice=menuPopup.getElementsByAttribute('user-choice','false')[0];custombuttons.setPrefs(s,hasNotUserChoice ? true : false);}}, 0)},false,menuPopup)}}); // Листенер позволяющий сброс параметров с субменю по Shift+Enter||За код спасибо Dumby addEventListener("popupshown",{handleEvent:function(e){this[e.type](e);}, popupshown:function(e){if(e.target!=menuPopup)return;menuPopup.addEventListener ("popuphidden",this,false);window.addEventListener ("keydown",this,true);}, popuphidden:function(e){if(e.target!=menuPopup)return;menuPopup.removeEventListener("popuphidden",this,false);window.removeEventListener("keydown",this,true);}, popupshowing:function(e){e.target.parentNode.removeEventListener("popupshowing",this,false);e.preventDefault();},get old(){delete this.old; this.e=new MouseEvent("contextmenu",{});return this.old=parseInt(Services.appinfo.platformVersion)<25;},get prop(){delete this.prop; if("key"in KeyboardEvent.prototype)this.prop="key",this.val="Enter";else this.prop="keyCode",this.val=KeyboardEvent.DOM_VK_RETURN;return this.prop;}, keydown:function(e){if(!e.shiftKey||e.ctrlKey||e.altKey||e[this.prop]!=this.val)return;var target=menuPopup.querySelector("menu[_moz-menuactive]:not([open])"); if(!target)return;this.old ? target.addEventListener("popupshowing",this,false) : e.stopPropagation();target.dispatchEvent(this.e);menuPopup.dispatchEvent(this.e);}},false,menuPopup); // Открыть меню кнопки по сочетанию клавиш Alt + M (не зависит от текущей раскладки клавиатуры) // Посмотреть коды клавиш можно здесь: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#Constants_for_keyCode_value addEventListener('keyup',(e)=>{if(e.altKey&&!e.shiftKey&&!e.ctrlKey&&e.keyCode==77){e.preventDefault();e.stopPropagation(); menuPopup.showPopup(this,-1,-1,"popup","bottomleft","topleft");}},false,window); // Конвертировать текст в юникод ............. function convertFromUnicode(charset,str){ var converter=Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); converter.charset=charset; str=converter.ConvertFromUnicode(str); return str+converter.Finish();};
Можно на примере этой кнопки?
this._handleClick=()=>menuPopup.openPopup(this,"after_start");var array=[ ["IE","C:\\Program files\\Internet Explorer\\iexplore.exe"],["Explorer","C:\\windows\\explorer.exe"], ["separator"], ["Cmd Prompt","C:\\windows\\system32\\cmd.exe"],["Media Player","C:\\Program Files\\Windows Media Player\\wmplayer.exe"], ["Task Manager","C:\\windows\\system32\\taskmgr.exe"],["Control Panel","C:\\windows\\system32\\control.exe"], ["separator"], ["Notepad","C:\\windows\\notepad.exe"],["Calculator","C:\\windows\\system32\\calc.exe"], ["Virtual Keyboard","C:\\windows\\system32\\OSK.exe"],["Character table","C:\\windows\\system32\\charmap.exe"]]; var menuPopup=self.appendChild(document.createXULElement("menupopup"));array.forEach((m)=>{if(m=="separator"){ menuPopup.appendChild(document.createXULElement("menuseparator"));return}; var mItem=document.createXULElement("menuitem"); mItem.setAttribute("label",m[0]); mItem.setAttribute("class","menuitem-iconic"); mItem.setAttribute("image","moz-icon://file://"+m[1]); mItem.onclick=e=>Components.Constructor("@mozilla.org/file/local;1","nsIFile","initWithPath")(m[1]).launch(); menuPopup.appendChild(mItem);});
Отредактировано func4ptch4 (05-09-2019 18:12:08)
Отсутствует
document.createXULElement || document.createElementNS(xulns, ... оба работают вроде, а в чем разница?
Метод createElementNS был с незапамятных времён,
а метод createXULElement значительно моложе, Firefox 63+
А вот в кнопке "Insert special symbol" рабоает autopopup, но там какойто дополнительный код:
"this.prepend(popup);})(document.createElementNS(xulns,"menupopup"));" вместо "})(this.appendChild(document.createElement("menupopup")));"
Ничего дополнительного. В обоих случаях создаётся menupopup
и добавляется к кнопке как дочерний.
Но prepend ближе к XBL варианту, menupopup добавится как первый,
как это было бы до втягивания <toolbarbutton>'а в кустомэлементщину.
Наверно поэтому autopopup воспринимает такую кнопку лучше.
Отсутствует
func4ptch4
Открыть внешние win приложения
/*Initialization Code*/ // Открыть страницу в другом браузере из контекстного меню, от 27.12.2015. .................. ((contextMenu, copylink)=> { var menu = contextMenu.insertBefore(document.createXULElement("menu"), copylink); menu.setAttribute("label", "Открыть в другом браузере..."); menu.setAttribute("class", "menu-iconic"); menu.setAttribute("image", "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQkJP8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/+ysrL/5OTk/+Pj4//i4uL/4eHh/97e3nAAAAAAAAAAAAAAAAAVFRX/FRUV/xUVFf8VFRX/FRUV/xUVFf8VFRX/tbW1/+jo6P/n5+f/5+fn/+bm5v/l5eX/3t7ecAAAAAAAAAAAGBgY/xgYGP8YGBj/GBgY/xgYGP8YGBj/GBgY/7a2tv/p6en/6Ojo/+fn5//m5ub/5ubm/97e3v8AAAAAAAAAABsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/+3t7f/6urq/+np6f/o6Oj/5+fn/+fn5//e3t7/AAAAAAAAAAAeHh7/Hh4e/x4eHv8eHh7/Hh4e/x4eHv8eHh7/uLi4/+rq6v/p6en/6enp/+jo6P/n5+f/39/f/wAAAAAAAAAAISEh/yEhIf8hISH/ISEh/yEhIf8hISH/ISEh/7m5uf/r6+v/6urq/+rq6v/p6en/6Ojo/+Dg4P8AAAAAAAAAACEhIf8hISH/ISEh/yEhIf8hISH/ISEh/yEhIf+Wlpb/u7u7/7u7u/+6urr/ubm5/7m5uf+zs7P/AAAAAAAAAAC9vb3/v7+//7+/v/++vr7/vr6+/729vf+Wlpb/KCgo/ygoKP8oKCj/KCgo/ygoKP8oKCj/KCgo/wAAAAAAAAAA7+/v//Pz8//y8vL/8fHx//Hx8f/w8PD/vb29/ywsLP8sLCz/LCws/ywsLP8sLCz/LCws/ywsLP8AAAAAAAAAAPDw8P/09PT/8/Pz//Ly8v/x8fH/8fHx/729vf8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//AAAAAAAAAADx8fH/9PT0//T09P/z8/P/8vLy//Hx8f+/v7//MjIy/zIyMv8yMjL/MjIy/zIyMv8yMjL/MjIy/wAAAAAAAAAA8vLy//X19f/09PT/9PT0//Pz8//y8vL/wMDA/zU1Nf81NTX/NTU1/zU1Nf81NTX/NTU1/zU1Nf8AAAAAAAAAAN7e3nD29vb/9fX1//T09P/09PT/8/Pz/8HBwf84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP83Nzf/AAAAAAAAAAAAAAAA3t7ecPPz8//y8vL/8vLy//Hx8f/BwcH/ODg4/zk5Of85OTn/OTk5/zk5Of84ODj/Pj4+/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAIADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAADAAQAA//8AAA=="); menu.onclick =e=> e.target == menu && openWith(array[0][1]); addEventListener("popupshowing", ()=> menu.hidden = !gContextMenu.onLink && !gContextMenu.onPlainTextLink, false, contextMenu); addDestructor(()=> menu.remove() ); var arr = [ [ "KMP", "C:\\Program Files\\KMPlayer\\KMPlayer.exe"], [ "PotPlayer", "C:\\PotPlayer\\PotPlayer.exe"] ] var menuPopup = menu.appendChild( document.createXULElement("menupopup") ); arr.forEach((m)=>{ var label = m[0], path = m[1]; var mItem = document.createXULElement("menuitem"); mItem.setAttribute("label", label); mItem.setAttribute("class", "menuitem-iconic"); mItem.setAttribute("image", "moz-icon://file://" + path); mItem.onclick =()=> openWith(path); menuPopup.appendChild( mItem ); }); function openWith(path) { var loc = content.document.location; var url = (loc.host.slice(-3) == '.рф') ? Services.io.newURI(loc.href, null, null).asciiSpec : loc; var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath(path); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file); !gContextMenu.onLink ? process.run(false, [content.location.href], 1) : process.run(false, [gContextMenu.linkURL], 1); }; })(document.getElementById("contentAreaContextMenu"), document.getElementById("context-copylink"));
Отсутствует
Dumby
Спасибо, вопрос как вставить "this.prepend(popup);" в "Открыть внешние win приложения".
Пробовал в "self.appendChild(document.createXULElement("menupopup"));" запутался так как не понимаю, вместо "this.prepend(popup);" делал "prepend(popup);"...
Но что вместо него ставить? и главное потом куда.
Сам скрипт autopopup 2016 года старый, его переписывать гон у меня знаний нет а сюда давать стыдно строк много + там даже вроде есть привязка cb(которая не пашет).
Поэтому пытаюсь так кнопок с попапом около 3-4 и часто пользуюсь, кликать лишний раз уже неудобно. Или там можно что то заменить? не правя весь код?
----
Вот еще нашел разницу, поэтому подумал там не "this." но не ясно все равно.
if(this.type!="menu"){this.type="menu";if(!this.hasAttribute("is"))return;} (рабочий он идет с this.prepend(popup); )
this.type!="menu"? this.type="menu": (старый не рабочий)
solombala
Спасибо, но я как пример дал для autopopup-а, кстати по мне удобнее не через саму ссылку а так кликать по странице ну или hotkey(если один браузер).
Ех мне еще хоткей восстанавливать...(
Отредактировано func4ptch4 (05-09-2019 18:15:05)
Отсутствует
func4ptch4
Хочешь гор.клавишу ?, можно из буфера ...Просто код и "настройка кнопки" , типа, escape
/*CODE*/ var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); file.initWithPath('D:\\CrazyFox\\Crazyfox.exe'); var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); var link = gClipboard.read(); var args = [link,"/play"]; process.init( file ); process.run( false, args, args.length );
Отсутствует
запутался
menuPopup там определяется так:
var menuPopup=self.appendChild(document.createXULElement("menupopup"));
Но appendChild возвращает добавленное, а prepend нет,
поэтому разбиваем на две части, вот так:
var menuPopup = document.createXULElement("menupopup");
self.prepend(menuPopup);
Отсутствует
Dumby
Спасибо большое сработало!) автопопап пашет, остальные сам попытаюсь.
drage
У меня так, там удобно что много хоткеев можешь ставить а не на каждый button, про кнопки знал.
Твой код не читает с адресной строки? только с буфера? за что отвечает args?
По идее можно и в кнопки писать хоткей, но это там трудно вроде)
https://forum.mozilla-russia.org/viewto … 21#p772921
var environment=Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment); var file=Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(environment.get("PROGRAMFILES")+"\\Internet Explorer\\iexplore.exe"); process.init(file);process.run(false,[gBrowser.currentURI.spec],1); }catch(ex){alert("Failed to open IE!")}; //openIElink - forum.mozilla-russia.org/viewtopic.php?pid=728804#p728804|770339#p770339|770223#p770223 //============================== var prof=Services.dirsvc.get('ProfD',Ci.nsIFile); var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); prof.initWithPath(prof.path+"\\..\\..\\gBrave 0.67\\brave-portable.exe"); var uri=gBrowser.currentURI.spec; var uri=/.рф/.test(uri)?Services.io.newURI(uri,null,null).asciiSpec:uri; process.init(prof);process.run(false,[uri],1); /**/ //============================== var file=Services.dirsvc.get('ProgF',Ci.nsIFile); var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); file.initWithPath(file.path+"\\Internet Explorer\\iexplore.exe"); process.init(file);process.run(false,[gBrowser.currentURI.spec],1); //============================== var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(FileUtils.getFile("ProgF",["Internet Explorer","iexplore.exe"]));process.run(false,[gBrowser.currentURI.spec],1); //.File(String.raw`C:\x`)
Отредактировано func4ptch4 (10-09-2019 05:47:23)
Отсутствует
func4ptch4
Хоткеи автоматом? А, из адреса в буфер -
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ECopy%20URL%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAACU0lEQVR42q2UPWhTURiGn9C0aVOJGL1qbTCQSiUViwWhcTCDIYKYQaq2Eq0/4O6ggwhVoejSyaXioINIpEMqmoKDdLBY0kIHq2BBqFKIOgQUkyYlNenxnHtq89OkdPAb7uHe853nvN97vnMtrltC8B/CUguUzYLNBnV1+j21qEfHFj3mcnp+Q5BKUpFMpODTNKR/wmJWU7c5odGOw3+M5qbiRlVBdRZYmE3Ixxy+20HiZyrK6Jc7zU7gDARNkFJWBvonV5WRGn/N3ckT3Nlaw5OTC1LpL1xHD61XpECtu+B9VJazx4MYNXRSYE5+fAsih2/yGnEvfKdAa3sMd+8pCqIKqM0NU8Nj+G6GiF+CF3no2TGIcXWA5GgUlnOIRHhVRQTjXLh6aW17JeihBA1JUAie/YF+YxDfvQGmHr2BHwlE8ooG7X6KceHiepDypqMdvaDBhpjx6wWd8v3bPKxk8L28Tty/6pMnSkvvadNwE1Qo6GNssOqEL48j4DQQH4Jr5i4haMJSNPu8bIf5j7gC3eVmK8iy9CPxXPpwoBsRc9Xs4iNPpOqhMRzHQ9jqS45fKcosydJejYCnEzHuLe7ck4S5aQ5eDvH5q/RxZsI03NodxNgO+XxFHyVi0ge3t0xJx33JGNZlsiJX1MsV+w/j3ucw59MZsNsrOluBSj3ZeUNekegILX19uFvlB5UlLfqd1vewUHEfqoK6hmT/PYjgPBs2d1SnqbwoDau1eM/WQKp/ku9kN2dTuoTGZqxdfrPLS+VvFGug0lDmVf4mNgXafHrt+AuDpPp7jCQ8NwAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20urlbar%20%3D%20document.getElementById%28%22page-action-buttons%22%29%3B%0Avar%20button1%20%3D%20document.getElementById%28_id%29%3B%0Aurlbar.insertBefore%28button1%2C%20urlbar.firstChild%29%3B%0A%0Athis.onclick%20%3D%20this.oncontextmenu%20%3D%20function%28event%29%20%7B%0Aif%20%28event.button%20%3D%3D%200%29%20%7B%0AgClipboard.write%28losslessDecodeURI%28gBrowser.currentURI%29%29%3B%0AgURLBar.inputField.blur%28%29%3B%0AalertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/cpd_OK.png%22%2C%20%22CopyClipboard%22%2C%20%22%u0410%u0434%u0440%u0435%u0441%20%u0432%20%u0431%u0443%u0444%u0435%u0440%u0435%22%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20alertsService.closeAlert%28%29%2C%201000%29%3B%20%0A%7D%0Aif%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%7B%0A%0AgURLBar.inputField.blur%28%29%3B%0AgClipboard.clear%28%29%3B%0A%0A%20%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alertsService.showAlertNotification%28%22chrome%3A//global/skin/icons/cpd_OK.png%22%2C%20%22CopyClipboard%22%2C%20%22%u0411%u0443%u0444%u0435%u0440%20%u043E%u0431%u043C%u0435%u043D%u0430%20%u043E%u0447%u0438%u0449%u0435%u043D%22%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20alertsService.closeAlert%28%29%2C%201000%29%3B%20%0A%7D%0A%7D%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0Athis.tooltipText%20%3D%20%22%u041B%3A%20%u041A%u043E%u043F%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0430%u0434%u0440%u0435%u0441%5Cn%u041F%3A%20%u0421%u0431%u0440%u043E%u0441%20%u0430%u0434%u0440%u0435%u0441%u0430%20%u0438%u0437%20%u0431%u0443%u0444%u0435%u0440%u0430%20%22%3B%20%0Avar%20style%20%3D%20custombutton.buttonGetHelp%28self%29.replace%28/id/g%2C%20_id%29%3B%0Avar%20uri%20%3D%20makeURI%28%27data%3Atext/css%2C%27+%20encodeURIComponent%28style%29%29%3B%0Avar%20sss%20%3D%20Cc%5B%22@mozilla.org/content/style-sheet-service%3B1%22%5D.getService%28Ci.nsIStyleSheetService%29%3B%0Asss.loadAndRegisterSheet%28uri%2C%200%29%3B%20%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%23id%20%7B%0A%0Amargin-left%3A%201.1em%20%21important%3B%0A%0Amargin-right%3A%201px%20%21important%3B%0A%7D%20%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отсутствует
Dumby
Сорри, но снова запарился вроде сделал автопопап, но сбился "vertical", при клике все норм при автопопапе криво вниз.
Походу код криво вставил, var mp=document.createXULElement("menupopup");this.button.prepend(mp);
https://github.com/Infocatcher/Custom_Buttons/tree/master/Merge_Custom_Buttons
И вопрос, написано "Fix menu auto-opening in Firefox 69+" то есть там уже она есть? Почему тогда не открывалось автоматом?..
Также как вставить в "Открыть внешние win приложения" 772971#p772971, "vertical"?
Возможно ли уменьшит код, в одну строку? ну или как без "process" обойтись?
var file=FileUtils.getFile("ProgF",["Internet Explorer","iexplore.exe"]); var process=Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(file);process.run(false,[gBrowser.currentURI.spec],1);
Отредактировано func4ptch4 (06-09-2019 16:10:11)
Отсутствует
И вопрос, написано "Fix menu auto-opening in Firefox 69+" то есть там уже она есть? Почему тогда не открывалось автоматом?..
Чтобы открылось автоматом должен быть
открыт какой-нибудь из коллег по тулбару.
при клике все норм при автопопапе криво вниз
Это на вертикальном тулбаре что ли?
Можно попробовать заменить в автопопапе 'after_start'
на DropElt.closest("toolbar[orient=vertical]") ? "end_before" : "after_start"
Отсутствует
Странно. Тут https://addons.thunderbird.net/en-us/firefox/addon/custom-buttons/ написано, что custom-buttons в Quantum не работают, но тема живая.
Как вы работаете с custom-buttons? Подключаете поддержку устаревших расширений?
Отсутствует
Отсутствует
Dumby
Сработало ураа) да на вертикальном.
// ==UserScript== // @name AutoPopup.uc.js // @description Auto popup menulist/menupopup/Panelpopup // @compatibility Firefox 2.0+ // @author GOLF-AT // @version 2.0.0.20131119 (function(){var PopElt=null;var DropElt=null; var PopTimer=null;var HideTimer=null; var AlwaysPop=false;var nDelay=600; function IsNewMenuBtn(elt){try{return elt.id=='PanelUI-menu-button';}catch(e){return false;}} function AutoPopup(){PopTimer=null; if (DropElt){ if (DropElt.localName=='dropmarker' || IsNewMenuBtn(DropElt)) PopElt=DropElt; else{ var v=null; try{v=DropElt.ownerDocument. getAnonymousNodes(DropElt); }catch(ex){} if(v!=null && v.length!=0 && v[0]. localName=='menupopup') PopElt = v[0]; else PopElt=DropElt.childNodes[0];} if (IsNewMenuBtn(PopElt)){PanelUI.show();return;} try{PopElt.openPopup(PopElt.parentNode, DropElt.closest("toolbar[orient=vertical]")?'end_before':'after_start'); //('after_start');|forum.mozilla-russia.org/viewtopic.php?pid=773032#p773032 }catch(e){PopElt=null;} } } function HidePopup() { try { if (PopElt.localName=='dropmarker') PopElt.parentNode.closePopup(); else if (IsNewMenuBtn(PopElt)) PanelUI.hide(); else PopElt.hidePopup(); }catch(e) {} HideTimer = null; DropElt = null; PopElt = null; } function MouseOver(e) { if (!AlwaysPop && !document.hasFocus()) return; if (e.target.getAttribute('cb-name') == "Proxy") return; if (e.target.getAttribute('cb-name') == "Merge Custom Button") return; if (e.target.getAttribute('cb-name') == "Session Bookmarks") return; if (IsButton(e.target)) { type = e.target.getAttribute('type'); if (type == 'menu-button') { if (e.originalTarget!=e.target) return; } /*else { if (type != 'menu') return; }*/ } if (HideTimer) { window.clearTimeout(HideTimer); HideTimer = null; } try { if ('PopupAutoComplete'==e.target.id. substr(0,17)) return; for(var elt=e.target; elt!=null; elt= elt.parentNode) { if (elt.localName=='popup' || elt. localName=='menupopup') return; } }catch(ex) {} if (IsNewMenuBtn(PopElt)) { if (e.target != PopElt) HidePopup(); } else if (PopElt != null) { if (DropElt!=null && e.target==DropElt) return; try { if (PopElt.localName != 'dropmarker' ) { for(var elt=e.target; elt!=null; elt=elt.parentNode) { if (elt == PopElt) return; } } }catch(ex) {} HidePopup(); } DropElt = e.target; PopTimer = setTimeout(AutoPopup, nDelay); } function MouseOut(e) { if (PopTimer) { window.clearTimeout(PopTimer); PopTimer = null; } if (!HideTimer && PopElt && !IsNewMenuBtn(e. target)) HideTimer = window.setTimeout(HidePopup, 500); } function IsButton(elt) { try { return elt.localName=='toolbarbutton' || elt .localName=='button'; }catch(e) { return false; } } function IsMenuButton(elt) { if (IsNewMenuBtn(elt)) return true; if (!IsButton(elt)) return false; for(var i=0; i<2; i++) { try { var nodes = i==0x01 ? elt.childNodes : elt. ownerDocument.getAnonymousNodes(elt); if (nodes!=null && nodes.length && nodes[0] .localName=='menupopup') return true; }catch(e) {} } return false; } function EnumElement(elt) { try { if (elt.localName == 'prefpane') { elt.addEventListener('paneload', function(e) { setTimeout(function() { EnumElement(e. target); }, 100); }, false); } else if(elt.id=='sidebar' && !elt.hasAttribute( 'AutoPopup')) { elt.setAttribute('AutoPopup', true) elt.addEventListener('SidebarFocused', function(e) { EnumElement(elt); }, false); } else if(elt.id == 'editBookmarkPanel') return; }catch(e) {} for(var i=0; i<2; i++) { var nodes = null; try { if (elt.localName == 'browser') { i = 1; nodes = elt.contentDocument.childNodes; } else nodes = i==0x01 ? elt.childNodes : elt. ownerDocument.getAnonymousNodes(elt); }catch(e) { nodes = null; } if (nodes == null) continue; for(var n=0; n<nodes.length; n++) { try { var node = nodes[n]; if ('PopupAutoComplete'==node.getAttribute( 'id').substr(0,17) || 'menupopup'==node .localName || node.localName=='popup') ; else if (node.localName != 'dropmarker') { if (node.localName=='menu' && 'menubar' ==node.parentNode.localName) ; else if(!IsMenuButton(node)) node = null; } else if(node.getAttribute('type')=='menu') { node = node.parentNode; if (!node.firstChild || node.firstChild. localName!='menupopup') continue; } if (node == null) { EnumElement(nodes[n]); continue; } if (node.hasAttribute('command')) continue; addEventListener('mouseout', MouseOut, false, node); addEventListener('mouseover',MouseOver, false, node); }catch(e) {} } } } setTimeout(function() { EnumElement(document); }, 1100);})();
Отредактировано func4ptch4 (07-09-2019 20:17:20)
Отсутствует
func4ptch4
Ашто она делает?
Отсутствует
Dumby
http://htmlbook.ru/css/padding
Что делать? Падает 69 при MOZ_FORCE_DISABLE_E10S=1 или в коде это, падает при без мульти...
Это Зачем?
Отредактировано solombala (07-09-2019 18:04:51)
Отсутствует
Ребята есть ли кнопка для копипаста?
На некоторых сайтах когда копируешь текст и вставляешь его в другой документ, то автоматом добавляется ссылка на страницу откуда было скопировано.
Хотелось бы запретить автоматическое добавление ссылок.
А на других сайтах текст вообще не выделяется и не копируется
Есть ли кнопка, которая позволяла бы копирование?
Отредактировано leex (08-09-2019 19:11:53)
Отсутствует
leex user_pref("dom.event.clipboardevents.enabled",false); //=Не вставляются комментарии на Youtube - изменить (п.у. true), глючит фейсбук!
//=Запрет сайту знать что вы копировали, также убирает копирайт.
// ==UserScript== // @name Absolute Enable Right Click & Copy // @namespace Absolute Right Click // @description Force Enable Right Click & Copy & Highlight // @shortcutKeys [Ctrl + `] Activate Absolute Right Click Mode To Force Remove Any Type Of Protection // @author Absolute // @version 1.8.9 // @include *://* // @icon https://i.imgur.com/AC7SyUr.png // @compatible Chrome Google Chrome + Tampermonkey // @grant GM_registerMenuCommand // @license BSD // @copyright Absolute, 2016-Oct-06 // ==/UserScript== (function() { 'use strict'; var css = document.createElement('style'); var head = document.head; css.type = 'text/css'; css.innerText = `* { -webkit-user-select: text !important; -moz-user-select: text !important; -ms-user-select: text !important; user-select: text !important; }`; function main() { var doc = document; var body = document.body; var docEvents = [ doc.oncontextmenu = null, doc.onselectstart = null, doc.ondragstart = null, doc.onmousedown = null ]; var bodyEvents = [ body.oncontextmenu = null, body.onselectstart = null, body.ondragstart = null, body.onmousedown = null, body.oncut = null, body.oncopy = null, body.onpaste = null ]; [].forEach.call( ['copy', 'cut', 'paste', 'select', 'selectstart'], function(event) { document.addEventListener(event, function(e) { e.stopPropagation(); }, true); } ); alwaysAbsoluteMode(); enableCommandMenu(); head.appendChild(css); document.addEventListener('keydown', keyPress); } function keyPress(event) { if (event.ctrlKey && event.keyCode == 192) { return confirm('Activate Absolute Right Click Mode!') == true ? absoluteMode() : null; } } function absoluteMode() { [].forEach.call( ['contextmenu', 'copy', 'cut', 'paste', 'mouseup', 'mousedown', 'keyup', 'keydown', 'drag', 'dragstart', 'select', 'selectstart'], function(event) { document.addEventListener(event, function(e) { e.stopPropagation(); }, true); } ); } function alwaysAbsoluteMode() { let sites = ['example.com','www.example.com']; const list = RegExp(sites.join('|')).exec(location.hostname); return list ? absoluteMode() : null; } function enableCommandMenu() { var commandMenu = true; try { if (typeof(GM_registerMenuCommand) == undefined) { return; } else { if (commandMenu == true ) { GM_registerMenuCommand('Enable Absolute Right Click Mode', function() { return confirm('Activate Absolute Right Click Mode!') == true ? absoluteMode() : null; }); } } } catch(err) { console.log(err); } } var blackList = [ 'youtube.com','.google.','.google.com','greasyfork.org','twitter.com','instagram.com','facebook.com','translate.google.com','.amazon.','.ebay.','github.','stackoverflow.com', 'bing.com','live.com','.microsoft.com','dropbox.com','pcloud.com','box.com','sync.com','onedrive.com','mail.ru','deviantart.com','pastebin.com', 'dailymotion.com','twitch.tv','spotify.com','steam.com','steampowered.com','gitlab.com','.reddit.com' ] var enabled = false; var url = window.location.hostname; var match = RegExp(blackList.join('|')).exec(url); if (window && typeof window != undefined && head != undefined) { if (!match && enabled != true) { main(); enabled = true //console.log(location.hostname); window.addEventListener('contextmenu', function contextmenu(event) { event.stopPropagation(); event.stopImmediatePropagation(); var handler = new eventHandler(event); window.removeEventListener(event.type, contextmenu, true); var eventsCallBack = new eventsCall(function() {}); handler.fire(); window.addEventListener(event.type, contextmenu, true); if (handler.isCanceled && (eventsCallBack.isCalled)) { event.preventDefault(); } }, true); } function eventsCall() { this.events = ['DOMAttrModified', 'DOMNodeInserted', 'DOMNodeRemoved', 'DOMCharacterDataModified', 'DOMSubtreeModified']; this.bind(); } eventsCall.prototype.bind = function() { this.events.forEach(function (event) { document.addEventListener(event, this, true); }.bind(this)); }; eventsCall.prototype.handleEvent = function() { this.isCalled = true; }; eventsCall.prototype.unbind = function() { this.events.forEach(function (event) {}.bind(this)); }; function eventHandler(event) { this.event = event; this.contextmenuEvent = this.createEvent(this.event.type); } eventHandler.prototype.createEvent = function(type) { var target = this.event.target; var event = target.ownerDocument.createEvent('MouseEvents'); event.initMouseEvent( type, this.event.bubbles, this.event.cancelable, target.ownerDocument.defaultView, this.event.detail, this.event.screenX, this.event.screenY, this.event.clientX, this.event.clientY, this.event.ctrlKey, this.event.altKey, this.event.shiftKey, this.event.metaKey, this.event.button, this.event.relatedTarget ); return event; }; eventHandler.prototype.fire = function() { var target = this.event.target; var contextmenuHandler = function(event) { event.preventDefault(); }.bind(this); target.dispatchEvent(this.contextmenuEvent); this.isCanceled = this.contextmenuEvent.defaultPrevented; }; } })();
Отредактировано func4ptch4 (08-09-2019 03:36:59)
Отсутствует
Не знаю, как сейчас с этой настройкой, но раньше с ней не вставлялись комментарии на ютубе и глючил фейсбук...
На WF работает и комменты вроде нормально. Если есть проблемы с сайтами, то можно запретить на них работу скрипта.
Отсутствует
Ultima2m
Нашёл у себя для таких случаев древний букмарклет. Не знаю, работает ли, хотел проверить, что есть WF?
javascript:(function(w){var%20arr=['contextmenu','copy','cut','paste','mousedown','mouseup','beforeunload','beforeprint'];for(var%20i=0,x;x=arr[i];i++){if(w['on'+x])w['on'+x]=null;w.addEventListener(x,function(e){e.stopPropagation()},true)};for(var%20j=0,f;f=w.frames[j];j++){try{arguments.callee(f)}catch(e){}}})(window);
Отсутствует
Dumby
такая вот шняга с 69 , если стили меняю на xhtml, окно не такое. Нет новой версии СВ ? Сам рихтовал,но не то.Ставлю старую, тогда и стили не трогаю и в
AppConstants.jsm меняю
Отредактировано solombala (10-09-2019 13:54:06)
Отсутствует