最近在重构插件,把之前和现在遇到的问题都记录一下吧,抛砖引玉,不对的地方,欢迎指正,: )
问题表现
插件在加载后(安装、插件页面重载、插件内部runtime重载),进行初始化时,概率性绑定事件遇到错误阻塞执行或者阻碍后续逻辑执行。
TypeError: Cannot read property ‘onBeforeSendHeaders’ of undefined(…)
尤其是当你刷新调试页面时,提示报错页面由你的页面不停的变化成各种内部脚本等:
extensions::guestViewEvents extensions::runtime
解决方案
在尝试简化代码、onload后执行,DOMLOADED后执行,onInstall后执行均无效后,使用try-catch容错方案对插件进行重载尝试,因插件是概率性出错,故可以通过插件快速自动重载来避免功能不可用。 示例代码
function init () {
try {
Debug.log(debugModuleName, '你的初始化代码');
chrome.webRequest.onBeforeSendHeaders...
chrome.tabs.onUpdated.addListener...
} catch (e) {
Debug.error('插件加载出现错误,正在重载。', e);
location.reload();
}
}
document.addEventListener('DOMContentLoaded', init);