2010-07-06 23 views
3

所以我從Apple Developer網站上的以下示例複製了代碼。多次運行注入javascript的Safari擴展

http://developer.apple.com/safari/library/documentation/Tools/Conceptual/SafariExtensionGuide/MessagesandProxies/MessagesandProxies.html#//apple_ref/doc/uid/TP40009977-CH14-SW1

當我運行的擴展,它除了注入腳本運行3次,導致要寫入的輸出CONSOLE.LOG 3次正常運行。我還在doBigCalc函數中發出警報,並打開了3個警報。

爲什麼發生這種情況/是否應該發生?

回答

5

你不會說你的實現,但它可能是你的代碼不是問題。關鍵是要了解注入的腳本已加載....從injected script documentation

腳本被注入到頂級頁面以及任何帶有HTML源代碼的子代,例如iframe。不要以爲每個瀏覽器標籤只有一個腳本實例。

+3

我剛纔讀到。我只是添加如果(window.top ===窗口),它修復它。 – 2010-07-07 16:44:43

1

說明文檔中提到,你可以在三個不同層次使用的事件處理程序發送消息:

safari.application.activeBrowserWindow.activeTab.addEventListener("message", waitForMessage, false); 

safari.application.activeBrowserWindow.addEventListener("message", waitForMessage, false); 

safari.application.addEventListener("message", waitForMessage, false); 

但你應該選擇的三個之一。你沒有將事件監聽器添加到所有三個人中嗎?如果你是,你會得到它運行三次肯定。