首页 > 解决方案 > 获得新权限后 Chrome 对象不更新

问题描述

我有一段代码请求我的 chrome 扩展的新权限。我尝试获得的新权限是nativeMessaging. 我得到了 chrome 要求授予新权限的弹出窗口,现在这就是麻烦开始的地方。

根据chrome.permissions.getAll并且chrome.permissions.contains我有我要求的许可。但是当我检查时chrome.runtime,例如connectNative没有出现。

此外,当我尝试在扩展背景页面上手动获取权限时,我得到了弹出窗口,根据getAll并且contains我有权限但我仍然得到错误,这connectNative是不可用的。

作为现在的解决方法,我只需重新加载扩展名,chrome.runtime.reload()它就可以工作了。但我想在没有发布的情况下拥有它。

是否存在在您获得新权限后未更新 chrome 对象的情况?

标签: javascriptgoogle-chrome-extension

解决方案


发现发生了什么。在您访问 chrome.runtime 一次后,就无法再对其进行更新。

这是触发问题的示例:

bg.js:

chrome.runtime;
chrome.browserAction.onClicked.addListener(() => {
  chrome.permissions.request({
    permissions: ['nativeMessaging'],
  }, granted => {
    console.log(chrome);
    const type = typeof chrome.runtime.connectNative;
    alert((type === 'function' ? 'GOOD' : 'BAD') + ': ' + type);
  });
});

清单.json

{
  "name": "Native Messaging Example",
  "version": "1.0",
  "manifest_version": 2,
  "background": {
    "scripts": ["bg.js"]
  },
  "browser_action": {},
  "optional_permissions": [
    "nativeMessaging"
  ]
}

评论“chrome.runtime;”行 它再次起作用。


推荐阅读