2011-05-26 171 views
1

我正在寫一個Chrome擴展,在我background.html頁,這是注射使用此命令js文件:所有從該文件中的代碼是在運行愚蠢的JS FUNC

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

頁面就好了,除了一個函數沒有爲onclick屬性定義。

我改變Facebook的主頁的innerHTML,包含「頭條新聞」和「最近」的DIV

我將這個網站:

"<a href='#' onclick='thisIsUndefined()'> 
    <span class='someClass'> 
    Better feed 
    </span> 
</a>" 

而就在JS被注射文件,thisIsUndefined完美地表述爲:

function thisIsUndefined() { 
    alert("is it working yet?"); 
} 

我甚至有我使用的文件中的另一功能,但每當我點擊會插入鏈接時,我得到一個錯誤說它是未定義的。

確切錯誤: 未捕獲的ReferenceError:thisIsUndefined沒有定義

下面是引用整個文件:

http://texthmu.com/Devin/HMU%20ext/mod.js

你能推薦像任何關鍵字 '全球' 或 '變種' 是可以修復這個定義嗎?

回答

0

這是我找到了最好的解決辦法:

$("#elementID").click(function() { 
    myFunc(); 
}); 
2

你對一個有點出來的樣子,由於Chrome的執行模型:

Content scripts execute in a special environment called an isolated world. They have access to the DOM of the page they are injected into, but not to any JavaScript variables or functions created by the page. It looks to each content script as if there is no other JavaScript executing on the page it is running on. The same is true in reverse: JavaScript running on the page cannot call any functions or access any variables defined by content scripts.

(粗體強調)

來源:頁面和內容http://code.google.com/chrome/extensions/content_scripts.html#execution-environment

3

腳本腳本是孤立的。他們與同一個DOM進行交互,但不直接與對方的變量進行交互。當您添加onclick時,它將在網站的腳本中查找該功能。最好的辦法是使用document.createElement,然後用onclickaddEventListener來附加你的功能。如果您想要使用innerHTML路線,請先將其附加到DOM,然後找到它並附加您的活動。

http://jsfiddle.net/EjYpQ/

+0

這正是它!很尖! – 2011-05-26 20:18:19