2010-06-16 41 views
5

我試圖編寫類似於Chrome的Bubble Translate的Safari擴展。Safari擴展 - 響應消息的注入腳本太多

當您單擊工具欄上的按鈕時,它會使用Google語言API自動將當前選定的文本翻譯爲您選擇的語言。

我用下面的注入腳本得到突出顯示的文本並顯示結果(如暫且警報):http://pastebin.com/bYVuQAmp

我用以下全局腳本調用注入腳本,如果neccessary:hxxp: //pastebin.com/VHaAKM5a

我的問題是:

腳本不會一下就注入到主網頁,但也成嵌入到網頁的廣告和類似的東西。由於這個原因,所選文本會被多次翻譯,因爲一個頁面中的所有嵌入腳本都會響應該消息。

我怎樣才能確保腳本只注入到正確的頁面或只有正確的頁面響應?

謝謝

菲利普

回答

1

也許你可以檢查,在該腳本注入的頁面是不是在一個框架:

if (window == window.parent) { /* you're not inside a frame! */ } 

我不知道,如果它的工作原理來自<object>標籤嵌入HTML雖然。有可能是的。

3

當全局腳本響應來自注入腳本的消息,包括目標標籤的響應消息的URL,就像這樣:

var message = { 
    translation: result.translation, 
    url: event.target.url 
} 
event.target.page.dispatchMessage("displayTranslation", message); 

然後,在注入腳本的消息處理程序,確認網址消息傳入匹配的頁面的url,像這樣:

if (event.name === "displayTranslation" && 
    event.message.url === window.location.href) { 
    alert(event.message.translation); 
} 

這樣,只有在發出請求將作用於響應幀中的腳本。