我正在開發一個簡單的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選項卡執行驗證。
這可以做到嗎?我在注入腳本或派發消息的方式上錯過了一些東西嗎?
感謝,這正是我了! 「global.html」是一個單身人士,每個選項卡的獨特實例會以多種方式限制擴展的可能性,這是非常有意義的。 – Simon 2012-02-19 11:05:46