我有一個Chrome擴展,它使用內容腳本以便動態插入引用an external javascript file的腳本標記。我使用的代碼是:Chrome擴展程序:插入JavaScript標記並調用函數
var html_doc = document.getElementsByTagName('head')[0];
var _js = document.createElement('script');
_js.setAttribute('type', 'text/javascript');
_js.setAttribute('id', 'chr_js');
_js.setAttribute('src', 'http://unixpapa.com/js/dyna1.js');
if(!document.getElementById('chr_js'))
html_doc.appendChild(_js);
的外部JavaScript包含以下代碼:
function lfunc(){
alert('RUNNING loaded function');
}
alert('LAST LINE of script');
當我打開一個頁面的選項卡中的「腳本最後一行」消息出現,表明腳本標記正確插入到DOM中。
我的擴展也有一個按鈕(即browser_action)。現在,我希望這個按鈕在被點擊時調用上面定義的lfunc()。不幸的是,我的代碼根本不起作用。
我用下面的代碼background.html頁面來處理我的按鈕的onClick事件:
<script>
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript(null,
{code: "try {lfunc()} catch (e) {alert(e);}"});
}); // it should call lfunc()
</script>
在的manifest.json文件的權限是:
"permissions": [
"tabs", "http://*/*", "https://*/*" ]
而不是獲取「RUNNING加載函數」消息我得到錯誤消息「ReferenceError: lfunc未定義爲「。
我在做什麼錯?
外部腳本和內容腳本是完全不同的(私人談話! )範圍。他們不能使用彼此的代碼。然而,他們爲此發明了一些東西:[sendRequest](http://code.google.com/chrome/extensions/extension.html#method-sendRequest)和[onRequest](http://code.google .com/chrome/extensions/extension.html#event-onRequest)但是**爲什麼**你要加載外部腳本? – Rudie 2011-05-10 13:03:37
如果你將lfunc安裝到窗口的全局作用域中並執行它,那麼可能會發生什麼......我要試試這個=) – Rudie 2011-05-10 13:16:28
嗯,我無法讓它工作。內容腳本和背景頁面可以交談,但似乎他們都無法訪問文檔窗口中的用戶內容。(他們可以訪問DOM和標準JS,但不能訪問用戶添加的功能,如外部腳本)。 – Rudie 2011-05-10 13:55:45