2013-02-27 173 views
0

我正在開發Chrome擴展。我的manifest.json的是:實際網頁上如何在Chrome擴展的後臺頁面上執行腳本

"page_action": { 
    "default_icon": { 
     "19": "icons/icon19.png", 
     "38": "icons/icon38.jpg" 
    }, 
    "default_popup": "options.html" 
}, 

在我的分機,我試圖執行它試圖運行腳本/到達:

// in options.html 
chrome.tabs.executescript(null,{code:"alert('hello!');"}) ; 

但Chrome擴展調試器輸出這樣的錯誤:

Uncaught TypeError: Object #<Object> has no method 'executescript' 

我想立即反映對content_script或實際網頁的選項的任何更改。

在page_action範圍內,我該如何到達「chrome」對象?

+0

它真的取決於你在做什麼,但是大多數時候你應該可以使用ContentScript http://developer.chrome.com/extensions/content_scripts.html 這是一個更好的做法。 – 2013-02-28 08:00:51

回答

2

現在試試將executescript更改爲executeScript首都'S'很重要。

executeScriptinsertCSS主要用於將js或css文件注入給定選項卡而不是原始代碼。當你想在非常特定的情況下注入代碼時,會使用它們。在你的代碼中,你並沒有指定一個id的代碼插入哪個標籤,所以它只是在給定的上下文中注入它。如果使用與消息傳遞類似的chrome.tabs.query,則應該能夠將代碼注入到實際選項卡中。

看來你正試圖影響某種變化當您更改選項從Page Action一個彈出一個給定的選項卡上的我個人會建議使用jQuery,同時使用來自其他問題將消息傳遞給做出的實際變化向給定選項卡發送消息。您可以嘗試使用cssJavascript的程序化注入來執行此操作,但選項中的連續更改可能會產生不良結果。

我不知道你正在嘗試做什麼樣的改變的確切細節。如果他們純粹是css,那麼您可以將一個樣式表注入到頁面中,只需在要更改的事物上切換一個類,併爲每個方案創建一個類。如果你更詳細地描述你想要做的事情,我可以給出更詳細的建議。

+0

我做過了,但它永遠不會到達實際網頁的範圍,只是在擴展沙箱中運行。 – Digerkam 2013-02-28 06:01:43

+1

@Digerkam我已經更新了一些關於'executeScript'的更多信息我的答案 – BeardFist 2013-02-28 07:25:34

+0

將page_action想象成一個顯示擴展選項的彈出窗口,我在這裏完成的是直接反映對實際網頁的任何選項更改。我通過你的回答解決了我的問題,謝謝! – Digerkam 2013-02-28 13:53:02

相關問題