单击浏览器操作时,我正在将数据从后台传递到内容脚本。刚开始时,它可以正常工作,但是在喝完一杯咖啡后,它就停止了工作。后台脚本正在发送消息,但是内容脚本没有响应。内容脚本正在所有打开的选项卡中运行。
实际上,我通过在每次打开选项卡时手动检查内容脚本来解决此问题。再三,一而再再而三。它可以工作,但是会创建多个content.js实例,我想这对性能不利。
此外,尝试改用长寿命端口连接。但是找不到在浏览器操作事件中将消息从后台发送到内容脚本的方法
// manifest.json
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["js/content.js"]
}
],
"background": {
"scripts": ["js/background.js" ],
"persistent": false
},
// background.js
chrome.browserAction.onClicked.addListener(sendfunc); // waiting for the browser action
function sendfunc(tabs){
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.windows.getAll({ populate:true},function(windows){
allTabs = windows
sendMessage(tabs)
});
}
}
function sendMessage(tabs){
chrome.tabs.sendMessage(tabs[0].id, {
message: 'test'
})
}
// content.js, stops receiving messages after some time, runs on multiple tabs
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log ('Got message', request)
});
我希望内容脚本将继续从后台脚本接收消息,但是不会发生。