У меня простой вопрос относительно пункта контекстного меню для расширений Safari. Я хочу, чтобы пункт контекстного меню «Метка элемента меню A» появлялся, когда пользователь щелкает правой кнопкой мыши по определенному классу на HTML-странице. Любые идеи, какие типы событий я должен слушать или как мне это сделать? Спасибо.
Помощь расширения Safari! Отображение пункта контекстного меню только тогда, когда пользователь щелкает правой кнопкой мыши класс
Ответы (1)
Что вам нужно, так это внедренный скрипт. См. страницу документации, на которую ссылался Люк, под заголовком «Добавление контекстной информации». Ваш внедренный скрипт должен иметь обработчик события «contextmenu», подобный этому:
document.addEventListener("contextmenu", function (evt) {
safari.self.tab.setContextMenuEventUserInfo(evt, evt.target.className);
}, false);
В скрипте вашей глобальной страницы у вас должно быть что-то вроде этого:
safari.application.addEventListener("contextmenu", function (evt) {
// evt.userInfo will have the classname of the right-clicked element
if (evt.userInfo == 'my_special_className') {
evt.contextMenu.appendContextMenuItem('myCommandName', 'My Context Menu Item');
} else {
// don't insert the context menu item
}
}, false);
Подробнее об внедренных скриптах: https://developer.apple.com/library/archive/documentation/Tools/Conceptual/SafariExtensionGuide/InjectingScripts/InjectingScripts.html
Подробнее о setContextMenuEventUserInfo: https://developer.apple.com/documentation/safariextensions/safaricontentbrowsertabproxy
person
chulster
schedule
27.02.2014
Помните, что
target
события contextmenu
может не иметь имя класса, которое вы ищете, но может быть у одного из его предков. Если это имеет значение, вам придется проверить имена классов всех предков цели события.
- person chulster; 27.02.2014
false
в обратном вызове предотвратит отображение контекстного меню? - person Luke Sapan   schedule 27.02.2014event.target
возвращает объект, по которому щелкнули. - person Luke Sapan   schedule 27.02.2014