2011-10-04 61 views
7

我正在寫一個Chrome擴展,需要做到以下幾點上運行:Chrome擴展:內容腳本在所有網頁上運行,另一個只有一個頁面

  • 注入內容腳本到當前(當彈出火災
  • 注入不同的內容腳本轉換爲特定域的所有頁面,總是

到目前爲止,我的第一個實現,通過在popup.html文件調用chrome.tabs.executeScript()並具有以下任何)頁面在清單中允許腳本的任何網頁上運行:

"permissions": [ 
    "tabs", "http://*/*" 
], 

現在,根據http://code.google.com/chrome/extensions/content_scripts.html,如果我想要一個內容腳本總是在特定頁面上運行,我必須在清單並設置權限宣佈它僅包含的頁面代碼應該運行。但是,這將打破第一部分。

我該如何解決這個問題?我能想到的唯一方法是總是調用某種「調用者」腳本,然後自己檢查和加載其他腳本,但這似乎很雜亂,並且我認爲是更好的方法。

+0

感謝您修復標籤!我不知道後者是否存在:) – Mala

回答

12
{ 
    "content_scripts": [ 
    { 
     "matches": ["http://www.google.com/*"], 
     "js": ["myscript.js"] 
    } 
    ], 
    "permissions": [ 
    "tabs", "http://*/*" 
    ] 
} 

myscript.js被自動注入到google.com,你仍然可以手動注入到http://*/*

+0

快速後續問題 - 'myscript.js'無法訪問與擴展的其餘部分相同的localStorage。如果擴展中的某個選項(存儲在localStorage中)被設置,我真的只想運行'myscript.js' ...我該怎麼做? – Mala

+1

@Mala你需要發送一個請求到後臺頁面,在那裏讀localStorage,然後把結果傳回去。請參閱http://code.google.com/chrome/extensions/dev/messaging.html – serg

+0

真棒,謝謝,得到它的工作:)我只希望Firefox擴展一樣容易 – Mala

相關問題