我的Chrome扩展重构进度已经60%了,目前又遇到了新问题。
这个问题的缘由得慢慢说来。
我的扩展由于需要用自定义的页面替换新标签页。在我的早期版本的实现是这样的:
chrome.tabs.onCreated.addListener(function(tab){
if(Mini.get_status()=='off'&&(tab.url=="chrome://newtab/"||tab.url=="chrome://newtab")){
chrome.tabs.update(tab.id, {url:chrome.runtime.getURL('show.html')});
}
});
也就是新建标签页的时候,用我自己的页面 URL 替换掉 Chrome 默认页面。
后来,Chrome 在某个版本后,新建标签页后,地址栏是空的,也就是 tab.url
是没有值,这就导致我之前的代码就失效了。
查看文档,发现正确的方法是在 manifest.json
中增加 chrome_url_overrides
这个选项,具体可以查看这里。
这就引入了新的问题。
我的扩展里原来是有一个开关的,这个开关可以控制新标签页是否显示我的自定义页面,也就是上面代码里的那个 Mini.get_status() == 'off'
。
现在用了 manifest.json
直接替换掉了默认页,而 manifest.json
是无法在扩展里修改的,同时 Chrome 没有提供相关的 API,那么如何实现这个开关就很尴尬了。
这个 BUG 我一直放着没有处理。
这次重构进行到了自定义页面重构后,这个问题就必须要解决了。
最终的解决方案是,监听页面更新,如果 URL 符合 chrome://newtab/
,那么就替换成访问 chrome-search://local-ntp/local-ntp.html
,代码如下:
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
if (tab.url === 'chrome://newtab/') {
if (store.getters.config.mini === false) {
chrome.tabs.update(tabId, { url: 'chrome-search://local-ntp/local-ntp.html' });
}
}
});
之所以用 chrome.tabs.onUpdated
,有两个原因:一个是因为 onCreated
拿不到 URL,一个是在当前标签页,如果点击主页按钮的时候,也会进入 chrome://newtab/
。
ET碎碎念,每周一,晚六点一刻更新,欢迎订阅
欢迎使用 SteemEditor 来编写文章,获取 @steemeditor.bot 的点赞!
感谢你的阅读,我是中文区见证人之一,欢迎通过 SteemConnect 来给我投票,或者打开 https://steemitwallet.com/~witnesses 页面,输入 ety001 进行投票。
中文区的见证人目前有:
支持一下他们(按字母顺序),一人可以有30票:
Thank you for reading. I'm a witness. I would really appreciate your witness vote! You can vote by SteemConnect. Or open https://steemitwallet.com/~witnesses page, input ety001 to vote.
Thanks for your 200.64SP to team-cn ! Your post has earned 10% team-cn upvotes!