2012-08-23 56 views
1

目前我正在使用消息傳遞從我的contentscript發送localStorage中的數據請求,並且我沒有任何問題,內容腳本按預期工作。是否可以從彈出窗口中觸發內容腳本中的行爲?

你可以在另一個方向嗎?

我有一個存在於內容腳本中的對象,該對象具有名爲「.apply()」的方法,並且我想在使用時單擊該選項來運行它。

我試圖使聽者在內容腳本是這樣的:

var myLinker = new Linker(); 
chrome.extension.onRequest.addListener(function(request) { 
    if (request.method == "apply") 
{ 
     myLinker.apply("nothing"); 
     alert("applied"); 

} 
    else 
     ; //Do nothing 

併發送請求給它這樣的:

chrome.extension.sendRequest({method: "apply"}, function(){ 
    alert("Tried to request"); 
}); 

我得到的,這是一個黑客攻擊的一位,但它是我能想到的唯一的東西,它甚至不起作用=/

有沒有辦法做到這一點?

我很確定我可以從彈出窗口(我認爲我看到一個api函數)中注入新的代碼,然後運行的東西,但這將需要更多的內存,只是感覺像一個壞的方式要做到這一點,因爲你基本上有兩次完全相同的代碼。

回答

3

要從擴展程序向內容腳本發送消息,請使用chrome.tabs.sendRequest而不是chrome.extension.sendRequest

因爲sendRequest has been superseded by onMessage in Chrome 20sendRequest沒有官方文檔了。 chrome.tabs.sendMessage的文檔可以找到here。請注意,這些事件不能混合使用,請使用*Request*Message

+0

編輯是因爲我意識到我誤解了你所說的,謝謝你的澄清。 – njfife

1

是的,你可以使用這樣的:http://developer.chrome.com/extensions/tabs.html#method-sendMessage

內容腳本生活在頁面的DOM中。而每一個是在Chrome打開網頁都有與之相關的標籤ID - http://developer.chrome.com/extensions/tabs.html#type-tabs.Tab

比方說,你要發送的{方法:「應用」}到剛剛在新標籤中打開一個頁面:

chrome.tabs.onCreated.addListener(function(tab) { 
    chrome.tabs.sendMessage(tab.id, { method: "apply" }); 
}); 

還有其他事件/方法可以讓您想要發送消息的特定標籤。我認爲有一個叫做getCurrent的發送到當前選擇的標籤,查看文檔。

+2

對'tab.id'使用'null'時,當前選項卡被選中。 –

相關問題