我目前正在使用Jquery構建一個Chrome擴展。當頁面加載並單擊我的擴展按鈕時,出現錯誤「Uncaught ReferenceError:$未定義」。但是如果我等兩三秒,擴展工作就會很好。我想知道如何解決這個延遲問題,因爲當我點擊它太早時它會打破擴展。Chrome擴展Jquery需要一段時間才能加載
我用過的其他擴展名似乎沒有這個問題。
我看過其他問題,關於在哪裏放置Jquery文件,以確保它在我的其他腳本之前加載。
我確信Jquery是在任何其他腳本之前加載的。我究竟做錯了什麼?爲什麼會有延遲?我將如何去修復它?
的manifest.json
{
"manifest_version": 2,
"name": "Test",
"description": "Test Extension",
"version": "1.0",
"browser_action": {
"default_icon": "off.png"
},
"background": {
"scripts": ["jquery.js", "background.js"],
"persistent": false
},
"permissions": [
"tabs",
"<all_urls>",
"activeTab",
"https://ajax.googleapis.com/"
],
"web_accessible_resources": [
"Extension_Design/*",
"jquery.js"
],
"content_scripts": [
{
"js": ["jquery.js", "content_script.js"]
}
]
}
background.js
//TODO: change to variable associated with tabs
var tabsArray = chrome.tabs.query;
for (var i = 0; i < tabsArray.length; i++) {
tabsArray[i] = false;
}
// When the icon is clicked:
chrome.browserAction.onClicked.addListener(function (tab) {
tabsArray[tab.index] = !tabsArray[tab.index];
if (tabsArray[tab.index]) {
// Change image to "on.png"
chrome.browserAction.setIcon({ path: "on.png", tabId: tab.id });
// Run content_script.js with jquery API enabled
chrome.tabs.executeScript(tab.id, { file: "jquery.js" });
chrome.tabs.executeScript(tab.id, { file: "jquery-ui.min.js" });
chrome.tabs.executeScript(tab.id, { file: "content_script.js" });
chrome.tabs.executeScript(tab.id, { code: "console.log('Extension is on')" });
} else {
// Change image to "off.png"
chrome.browserAction.setIcon({ path: "off.png", tabId: tab.id });
// Send a greeting message containing toggle
chrome.tabs.executeScript(tab.id, { code: "$(document.body).off();" });
chrome.tabs.executeScript(tab.id, { code: "$(sidebar).detach()" });
chrome.tabs.executeScript(tab.id, { code: "console.log('Extension is off')" });
}
});
如果你圍繞你的背景腳本是否仍然發生'ready'功能? $(document).ready(function(){ //你的背景代碼在這裏 }); –
'chrome.tabs.executeScript'與所有Chrome API都是異步的。注入回調參數中的每個下一個腳本。 – wOxxOm
@Daniel,通過使用ready函數來包圍我的後臺腳本,它基本上等待文檔完成加載。但是我試圖在文檔加載之前讓我的擴展工作,這是延遲幾秒鐘的一部分。 – Alan