【问题标题】:Chrome extension loses activeTab permissionChrome 扩展程序失去了 activeTab 权限
【发布时间】:2020-03-06 01:47:43
【问题描述】:

我有一个扩展程序,当单击“浏览器操作”(地址栏旁边的图标)时,会在当前选项卡的页面上执行一个脚本:

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript({
    file: 'controls.js'
  });
});

controls.js 将一些东西注入到 DOM 中,这样用户就可以按下一个键来告诉background.js 建立一个 WebRTC 连接并执行其他业务逻辑的东西。

通常这工作得很好。但是有时,如果扩展程序已打开但有一段时间未使用,则扩展程序会停止在选项卡上工作,我认为通常是在计算机进入睡眠状态并再次唤醒之后。发生这种情况时,在background.js 的控制台中,我收到错误“未检查的 runtime.lastError:无法访问页面的内容。扩展清单必须请求访问相应主机的权限。”

知道为什么会发生这种情况,或者我可以做些什么来捕捉这个错误并处理它以取回权限?

【问题讨论】:

  • 听起来像是一个错误,如果尚未报告,您可以在 crbug.com 上报告。要检测错误,请使用标准机制:在 executeScript 的回调中检查 chrome.runtime.lastError。看看重新加载标签是否有帮助。

标签: google-chrome-extension


【解决方案1】:

我费了好大劲才弄明白。

如果用户闲置了一段时间,刷新页面后,我注入 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
    });
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-07
    • 1970-01-01
    • 2018-09-24
    • 2017-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-26
    相关资源
    最近更新 更多