chrome extension通信问题
问题:chrome.runtime.onmessage.addlistener async 通信会马上断掉(开发环境没问题,打包后有问题。。。)
还是看官方文档靠谱 https://developer.chrome.com/extensions/runtime#event-onMessage
返回文档
解决办法:(1)return true 保持通信 ,(2)async IIFE 防止 async function中return 再次断开通信
返回文档
JavaScript
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.message === "get_thumbnails") {
(async () => {
const payload = await getThumbnails();
console.log("thumbPayload after function:", payload)
sendResponse({payload});
})();
return true; // keep the messaging channel open for sendResponse
}});
chrome extension百度插入搜索问题
百度的搜索页面和谷歌、搜狗、bing刷新页面不同,input回车+input(select)匹配关键词=>局部dom更新,导致contentScript插入的dom也会被刷掉,inject的样式也会remove掉,坑!!!
搞了接近两天,尝试的方法包括 inputChange 、onporpertychange(实时监听) 、mutationobserver(contentScript是在单独的沙盒中运行的,监听不到)、 setInterval 、 iframe 、插入到不被remove的dom里面(inject的样式会被remove掉)、contentScript监听urlchange(一般5s后才change)、等等。。。
后面准备在background中监听urlchange事件做下妥协处理,发现 百度搜索结果更新是和 title同步 的,而且 background的onUpdated的回调参数中有title的changeInfo,这样就能和 百度搜索结果 同步更新 TM的搜索结果了
返回文档
JavaScript
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
// 百度title change就是重新搜索
if (changeInfo.title && (matchSearchUrl(tab.url) === BAIDU)) {
chrome.tabs.executeScript(tab.id, {
file: './contentScripts.js',
allFrames: false
})
}
});