所以我從Apple Developer網站上的以下示例複製了代碼。多次運行注入javascript的Safari擴展
當我運行的擴展,它除了注入腳本運行3次,導致要寫入的輸出CONSOLE.LOG 3次正常運行。我還在doBigCalc函數中發出警報,並打開了3個警報。
爲什麼發生這種情況/是否應該發生?
所以我從Apple Developer網站上的以下示例複製了代碼。多次運行注入javascript的Safari擴展
當我運行的擴展,它除了注入腳本運行3次,導致要寫入的輸出CONSOLE.LOG 3次正常運行。我還在doBigCalc函數中發出警報,並打開了3個警報。
爲什麼發生這種情況/是否應該發生?
你不會說你的實現,但它可能是你的代碼不是問題。關鍵是要了解注入的腳本已加載....從injected script documentation:
腳本被注入到頂級頁面以及任何帶有HTML源代碼的子代,例如iframe。不要以爲每個瀏覽器標籤只有一個腳本實例。
說明文檔中提到,你可以在三個不同層次使用的事件處理程序發送消息:
safari.application.activeBrowserWindow.activeTab.addEventListener("message", waitForMessage, false);
safari.application.activeBrowserWindow.addEventListener("message", waitForMessage, false);
safari.application.addEventListener("message", waitForMessage, false);
但你應該選擇的三個之一。你沒有將事件監聽器添加到所有三個人中嗎?如果你是,你會得到它運行三次肯定。
我剛纔讀到。我只是添加如果(window.top ===窗口),它修復它。 – 2010-07-07 16:44:43