2011-03-02 87 views
3

我正在寫一個Chrome的內容腳本,當我在DOM注入這樣的:功能沒有定義創建一個Chrome擴展程序內容腳本

"<a href='#' onclick='alert(\"Hi!\");return false;'>Hi</a>" 

它工作正常(警報,當我點擊它會彈出)但是,如果我爲警報創建一個函數,它會說函數未定義。例如:

"<a href='#' onclick='alertPlease(\"Hi!\");return false;'>Hi</a>" 

function alertPlease(x){ 
    alert(x); 
} 

我所有的代碼都是相同的內容腳本js文件。

我是否需要在後臺加載另一個js文件後放置任何可以使用的代碼?我試着用'alertPlease()'添加一個背景頁面''功能,但也沒有效果。

任何提示將不勝感激!
謝謝!

回答

-1

指定manifest.json文件中的所有腳本下的 「content_scripts」

{ 
    "name": "My Extension", 
    "content_scripts": [{ 
    "matches": ["<all_urls>"], 
    "css": ["style.css"], 
    "js": ["jquery-1.5.js", "script.js"] 
    }] 
} 
+0

它在那裏。該擴展只包含1個js腳本,該腳本只有2個步驟:在onclick attr處注入錨點標記,並在點擊時添加該函數。如果我使用內聯警報,它會起作用。 – pizzamiasucks 2011-03-02 01:58:15

+0

嗯,我只是在我的擴展中使用jQuery,所以我沒有遇到這個問題,但似乎與DOM中的js交互的唯一方法是注入腳本標記。看看[這篇文章](http://stackoverflow.com/questions/2303147/injecting-js-functions-into-the-page-from-a-greasemonkey-script-on-chrome);我想這可能是你以後的事情。 – 2011-03-02 02:18:28

8

在運行腳本的內容 「isolated world」。網頁和內容腳本無法看到彼此的JavaScript變量(儘管它們可以看到相同的DOM)。當您在DOM中添加onclick屬性時,該處理程序將創建在的網頁的世界中,而不是您的擴展的世界中,以便代碼無法訪問您定義的其他功能。而不是使用onclick處理程序,您應該用純Javascript定義您的事件偵聽器,然後使用addEventListener來附加它。

孤立的世界是提高安全性和穩定性的功能。如果您在Greasemonkey sandbox in Firefox內開發,情況類似。

+0

很好的答案!有一點需要注意,但不能正常訪問這些內部JavaScript變量。但是,如果你願意,你可以「通過消息傳遞將JavaScript頁面的變量提取到你的擴展中。 – 2011-03-02 02:30:34

相關問題