2011-11-28 75 views
0

我試圖創建一個jQuery的彈出式窗口在任何頁面上,當用戶按下我的Chrome擴展時按需求觸發。chrome擴展名:注入引用我正在注入的腳本的代碼 - 爲什麼它失敗?

我有設置爲權限[ 「選項卡」, 「HTTP:// /」, 「https://開頭/」]

我有試圖做下列背景頁:

chrome.browserAction.onClicked.addListener(function(tab) { 

//chrome.tabs.executeScript(null, { code: "alert(document.title);" }, null); 

chrome.tabs.executeScript(null, {file: "demo.js"}, null); 

chrome.tabs.executeScript(null, { code: "document.body.appendChild(document.createElement('script')).src='demo.js'" }, null); 
     }); 

如果我取消註釋警報,它會在我點擊擴展圖標時出現。 但是,儘管如此,它並沒有做任何事情。

任何想法爲什麼失敗?

UPDATE 我設法通過引用一個url而不是本地資源(demo.js)來使它工作。 現在的代碼,這樣的作品,看起來像這樣:

chrome.tabs.executeScript(tab.id, { code: "document.body.appendChild(document.createElement('script')).src='http://iamnotagoodartist.com/stuff/wikiframe.js'" }, null); 

我的地方「demo.js」是從該URL的內容的副本反正。 我不確定爲什麼當我參考本地文件時不工作...?

回答

0

必須使用chrome.extension.getURL去了 「demo.js」 文件的完整路徑。

chrome.tabs.executeScript(null, { 
    code: "document.body.appendChild(document.createElement('script')).src='" + 
    chrome.extension.getURL("demo.js") +"';" 
}, null); 

順便說一句,如果你設置tabId參數設置爲null,該腳本將不會被注入到後臺頁面,但到the selected tab of the current window

+0

太棒了,非常感謝!\ n
您是否也知道如何在iframe網站(例如gmail)中運行它?我找到了「all_frames」:真正的參考,但它始終是內容腳本注入,而我只按需要注入 – Andrei

+0

你只需要在第二個參數對象中設置allFrames屬性爲true(請參閱第二個鏈接)注意,你將無法將腳本注入到通過JavaScript創建的框架中 –

+0

tx a很多!我仍然在gmail中得到安全警告,但它的工作原理 – Andrei

0

您沒有將tab id傳遞給executeScript,這樣腳本就會被注入到無法與之交互的backround頁面中。

chrome.tabs.executeScript(tab, {file: "demo.js"}, null);

+0

謝謝。我添加了 \t chrome.tabs.executeScript(tab.id,{file:「demo.js」},null); \t chrome.tabs.executeScript(tab.id,{code:「document.body.appendChild(document.createElement('script'))。src ='demo.js'」},null); \t 不幸的是,同樣的事情發生,沒有出現。 – Andrei

+0

如果我製作一個演示html頁面,其中包含 Test 然後出現彈出窗口。我正在嘗試將該代碼按需插入到任何網頁中。 – Andrei

+0

真棒,謝謝! (chrome.tabs.executeScript(null,{code:「document.body.appendChild(document.createElement('script'))。src ='」+ chrome.extension.getURL(「demo.js」)+「'」 ,allFrames:true}) – Andrei