最近在重构插件,把之前和现在遇到的问题都记录一下吧,抛砖引玉,不对的地方,欢迎指正,: )

问题表现

插件在加载后(安装、插件页面重载、插件内部runtime重载),进行初始化时,概率性绑定事件遇到错误阻塞执行或者阻碍后续逻辑执行。

TypeError: Cannot read property ‘onBeforeSendHeaders’ of undefined(…)

尤其是当你刷新调试页面时,提示报错页面由你的页面不停的变化成各种内部脚本等:

extensions::guestViewEvents extensions::runtime

解决方案

在尝试简化代码、onload后执行,DOMLOADED后执行,onInstall后执行均无效后,使用try-catch容错方案对插件进行重载尝试,因插件是概率性出错,故可以通过插件快速自动重载来避免功能不可用。 示例代码

functioninit(){
    try{
        Debug.log(debugModuleName,'你的初始化代码');
 
        chrome.webRequest.onBeforeSendHeaders...
        chrome.tabs.onUpdated.addListener...
 
    }catch(e){
        Debug.error('插件加载出现错误,正在重载。',e);
        location.reload();
    }
}
 
document.addEventListener('DOMContentLoaded',init);