Я разрабатываю простое расширение Safari, которое добавляет пункт контекстного меню, который при нажатии позволяет мне выполнять определенную задачу с данными на текущей странице. В моем injected-scripts.js
у меня есть функция validForContextMenu
, которая определяет, должно ли отображаться контекстное меню для нажатой вкладки. Вместе с этой функцией я отправляю следующее сообщение на мой global.html
, чтобы сообщить, должен ли на вкладке отображаться мой элемент контекстного меню или нет.
safari.self.tab.dispatchMessage("validate", validForContextMenu());
В global.html
я делаю следующее, чтобы прослушать сообщение, сохранить данные, возвращенные injected-scripts.js
, и выполнить фактическую проверку:
var contextMenuDisabled = true;
function respondToMessage(theMessageEvent) {
if (theMessageEvent.name === "validate") {
contextMenuDisabled = theMessageEvent.message;
}
}
safari.application.activeBrowserWindow.activeTab.addEventListener("message", respondToMessage, false);
function validateCommand(event) {
event.target.disabled = contextMenuDisabled;
}
safari.application.addEventListener("validate", validateCommand, false);
Все это работает довольно хорошо, за исключением того факта, что проверка выполняется только один раз, и только для вкладки / страницы, являющейся самой передней в момент загрузки моего расширения. Если эта страница действительна для контекстного меню, то будут действительны все остальные страницы и наоборот. Мне бы хотелось, чтобы проверка выполнялась индивидуально для каждой вкладки Safaris.
Может это будет сделано? Я что-то упускаю из-за того, как работают внедренные сценарии или отправленные сообщения?