2011-09-14 227 views
0

我無法正常工作。Chrome擴展程序使用內容腳本更改innerText

我想使用內容腳本使用鉻擴展名更改頁面上的h2文本我設置了擴展名,並且有一個正在爲我的內容腳本加載的script.js文件。

script.js 

document.getElementById('texttochange').innerText = "CHANGED !"; 

但是我總是得到錯誤:

Uncaught TypeError: Cannot set property 'innerText' of null 

有一些額外需要的Chrome擴展程序做的,這一點,如果加載爲user.js的userscript,讓Chrome上安裝安裝工作正常它,這讓我覺得它是一個最小的問題,但我不知道我錯過了什麼?

manifest.json 
{ 
    "name": "Test", 
    "version": "0.1", 
    "description": "Test", 
    "icons": { "16": "icon16.png", 
      "48": "icon48.png", 
      "128": "icon128.png" }, 
    "content_scripts": [ 
    { 
     "matches": ["http://site.com"], 
     "all_frames": true 
    } 
    ] 
} 

我的瀏覽器緩存清除得到我不能添加評論。

結構爲:

<frameset> 
    <frame> 
    ... 
     <h2 id="texttochange">This should change</h2> 
    ... 
    </frame> 
</frameset> 

這裏是TE擴展的鏈接,這是非常簡單的,在這種情況下,它正在試圖改變網站上的H2 omegle.com這是使用框架,從上面框架的東西。

http://www.megaupload.com/?d=UO7L9W2X

感謝。

+0

是 「http://site.com」 爲 「匹配」 的一個例子價值? – WiseGuyEh

+0

「texttochange」是h2元素的ID嗎? – Paul

+0

對兩者都是,我不需要把真實的網站,因爲這是一個非常普遍的問題,可以應用到任何網站。 – InNeedOfAssistance

回答

0

嘗試這個 -

document.body.innerHTML = document.body.innerHTML.replace(new RegExp("texttochange", "g"),"CHANGED !"); 
document.head.innerHTML = document.head.innerHTML.replace(new RegExp("texttochange", "g"),"CHANGED !"); 

{ 
"name": "My First Extension", 
"version": "1.0", 
"description": "The first extension that I made.", 
"background_page": "background.html", 
"browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
}, 
"permissions": [ 
    "tabs", "http://*/" ] 
} 

這是我的清單。我發佈的代碼是在background.html中,並在chrome.tabs.onUpdated上運行,以防腳本部分可能導致其無法正常工作

+0

不做任何事。如果我使用setInterval(我將最終用來做其他事情)頁面只是不斷重新加載。 – InNeedOfAssistance

+0

嗯,應該工作它直接從我的擴展名複製。 – ghostbust555

0

您是否收到此錯誤是因爲您的腳本是在DOM載入之前注入的。所以,你試圖改變的h2元素還不存在。只需在content_script部分添加「run_at」:「document_end」,那麼它應該可以工作。

manifest.json的

{ 
    "name": "Test", 
    "version": "0.1", 
    "description": "Test", 
    "icons": { "16": "icon16.png", 
      "48": "icon48.png", 
      "128": "icon128.png" }, 
    "content_scripts": [ 
    { 
     "matches": ["http://site.com"], 
     "run_at": "document_end", 
     "js": ["script.js"] 
    } 
    ] 
} 

的script.js

document.getElementById('h2Id').innerText = "CHANGED !"; 
+0

我試過了,以及使用document_idle。沒有工作過,和以前一樣。 – InNeedOfAssistance

+0

所以你使用了一個錯誤的id或它在iframe中。看一看。 – cvsguimaraes

相關問題