activeTab权限无法按预期工作 - Chrome扩展程序

时间:2018-01-29 01:27:58

标签: google-chrome-extension

根据permissions documentation,如果我们有activeTab个权限,我们无需指定基于网址的权限

  

以下任何网址都匹配所有主机:

http://*/*
https://*/*
*://*/*
<all_urls>
     

请注意,您可以避免声明所有主机权限   使用activeTab权限。

但是这只能工作一次,第二次出错(扩展UI在我们第二次尝试时打开),如果我们通过点击扩展图标再次启动弹出窗口就可以正常工作。

Unchecked runtime.lastError while running tabs.executeScript: 
Cannot access contents of the page. 
Extension manifest must request permission to access the respective host.

以下是详细信息

的manifest.json

{
  "manifest_version": 2,

  "name": "Getting started example",
  "description": "This is hello world example",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "popup.html"
  },
  "permissions": [
    "activeTab"
  ]
}

popup.html

<html>
  <head>
    <title>Getting Started Extension's Popup</title>
    <script src="popup.js"></script>
  </head>
  <body>
    <div>Hello World!</div>
    <input type="button" id="refreshPage" value="Refresh Page"/>
  </body>
</html>

popup.js

document.addEventListener('DOMContentLoaded', function() {

    function refreshPage() {
        chrome.tabs.executeScript(null, {
            code: 'window.location.reload(true)'
        }, function(){
            console.log("Page refershed");
        });
    }

    document.getElementById("refreshPage").addEventListener("click", refreshPage);

});

如果我们添加"*://localhost/*"(这适用于localhost),还有另一种方法可以为所有主机*://*/*指定(不确定这是否正确且安全),刷新按钮正在多次运行没有重新启动弹出窗口UI。 ActiveTab与基于URL的权限之间是否存在差异?由于特定原因,建议使用哪种特定方式?

1 个答案:

答案 0 :(得分:4)

activeTab 会暂时授予权限,直到导航或关闭选项卡。我的猜测是,在点击刷新时重新加载标签会撤消 activeTab 权限。避免使用window.location.reload或为您尝试执行脚本的域指定网址匹配。

https://developer.chrome.com/extensions/activeTab

  

activeTab权限为扩展程序提供临时访问权限   用户调用扩展时当前活动的选项卡 - 例如   通过单击其浏览器操作。对选项卡的访问将持续到选项卡   导航或关闭。