我有一个扩展,当单击"browser action“(地址栏旁边的图标)时,在当前选项卡的页面上执行一个脚本:
background.js
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript({
file: 'controls.js'
});
});controls.js向DOM中注入一些内容,以便用户可以按一个键告诉background.js设置WebRTC连接并执行其他业务逻辑操作。
通常情况下这很好。但有时,如果某个选项卡已经打开,但已经有一段时间没有使用,扩展程序就会停止工作,我认为通常是在计算机进入睡眠状态并再次醒来之后。当发生这种情况时,在background.js的控制台中,我会得到错误“未检查的runtime.lastError:无法访问页面的内容。扩展清单必须请求访问相应主机的权限”。
知道为什么会发生这种情况吗?或者我能做些什么来捕捉这个错误并处理它以获得权限呢?
发布于 2020-03-30 00:08:24
我花了很多功夫才弄清楚这件事。
如果用户已经空闲了一段时间,在刷新页面时,我要注入JS的网站将重定向到另一个域上的身份验证站点,然后再将用户重定向回来。这种情况发生得足够快,以至于通常不会注意到,但Chrome在域更改时会删除activeTab权限。
我是通过通过徽章文本通知用户来处理权限丢失的,大致如下:
chrome.tabs.executeScript(tab.id, {
code: 'alert("hello activeTab")'
}, (result) => {
if (result === undefined) { // this means that activeTab permission is lost
console.log('lost activeTab permission :(');
chrome.browserAction.setBadgeText({
text: 'off',
tabId: tab.id
});
}
});https://stackoverflow.com/questions/60556466
复制相似问题