【发布时间】:2012-02-19 00:44:41
【问题描述】:
我正在开发一个简单的 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);
这一切都很好,除了验证只执行一次,而且只有在我的扩展加载时标签/页面位于最前面。如果该页面对上下文菜单有效,那么所有其他页面也是如此,反之亦然。我希望为每个 Safari 选项卡单独执行验证。
这可以完成吗?我是否在注入脚本或发送消息的工作方式上遗漏了什么?
【问题讨论】:
标签: javascript macos safari safari-extension