互換的青春
2022-09-02 10:26:14
三天前,我開始使用chrome擴(kuò)展程序,我非常喜歡它。我遇到了一個(gè)問題:我最小化了重現(xiàn)我的問題的腳本:如果我 stackoverflow.com,我可以單擊該圖標(biāo),如果它向后臺腳本發(fā)送消息并收到消息“工作”,則會打開一個(gè)彈出窗口,上面寫著“工作”。如果我現(xiàn)在重新啟動瀏覽器,我會得到一個(gè)彈出窗口,說明開發(fā)人員模式下的擴(kuò)展可能是有害的,以及我是否要停用它們。我關(guān)閉此消息,當(dāng)我現(xiàn)在單擊擴(kuò)展名時(shí),它不起作用,我收到以下錯(cuò)誤:Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.我發(fā)現(xiàn)后臺腳本沒有運(yùn)行(我沒有收到來自后臺的警報(bào).js或打印到后臺.js控制臺)。我想擴(kuò)展程序以及背景.js可能被chrome阻止啟動,因?yàn)樗情_發(fā)人員模式下的擴(kuò)展程序。使擴(kuò)展再次運(yùn)行的唯一方法是從 chrome://extensions 刷新擴(kuò)展。我嘗試使用持久和非持久背景腳本,但這并沒有改變行為。我的分析是否正確,因此是否是在 Webstore 上部署腳本以使其正常運(yùn)行的唯一解決方案?或者,是否有其他方法可以在Chrome啟動時(shí)使開發(fā)人員模式下的應(yīng)用程序啟動?下面是最小示例:manifest.json{ "name": "BackgroundScript Error", "version": "0.0.1", "manifest_version": 2, "description": "When starting Chrome, background doesn't start, but when refreshing, background starts", "page_action": { "default_icon": "icon.png", "default_popup": "popup.html" }, "permissions": ["declarativeContent", "<all_urls>"], "background": { "scripts": ["background.js"], "persistent": false }}背景.jschrome.runtime.onInstalled.addListener(function() { console.log('Background script is running'); alert("Background is running"); chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { chrome.declarativeContent.onPageChanged.addRules([{ conditions: [new chrome.declarativeContent.PageStateMatcher({ pageUrl: {hostEquals: 'stackoverflow.com'}, })], actions: [new chrome.declarativeContent.ShowPageAction()] }]); }); console.log('setting up connection to popup'); chrome.runtime.onConnect.addListener(connected);});chrome.runtime.onMessage.addListener(function(request, sender) { console.log(request.action);});function connected(p) { console.log("connected to "+p); p.postMessage({action: 'didSomething', result: 'worked' }); p.onDisconnect.addListener(disconnected);}function disconnected(p) { console.log("disconnected from "+p);}
2 回答

侃侃爾雅
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
不,您無需部署到網(wǎng)上商店即可使其正常工作。
你遇到了一個(gè)問題,因?yàn)槟阋褜⒋蟛糠趾笈_腳本活動附加到偵聽器 - 僅當(dāng)安裝擴(kuò)展或清單版本更改時(shí)才會觸發(fā)偵聽器。第二次重新啟動瀏覽器時(shí),您的擴(kuò)展已安裝,清單版本保持不變,因此不會觸發(fā)該事件。chrome.runtime.onInstalled

白衣非少年
TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊
我想出了該怎么做:
如前所述,已安裝偵聽器中的函數(shù)僅在實(shí)際安裝腳本時(shí)調(diào)用(例如刷新),而不是在重新啟動瀏覽器時(shí)調(diào)用。
我發(fā)現(xiàn)了我的新手錯(cuò)誤:我異步注冊了聽眾,因?yàn)樵?a >Chrome文檔中被列為“不該做”。詳細(xì)來說,這條線應(yīng)該從已安裝的監(jiān)聽器中取出:
chrome.runtime.onConnect.addListener(connected);
感謝您為我指出正確的方向!
添加回答
舉報(bào)
0/150
提交
取消