Sandeep Kumar
Sandeep Kumar

Reputation: 1856

activeTab permissions not working as expected - Chrome Extension

As per permissions documentation, if we have activeTab perimissions, we need not specify the URL based permissions

Any of the following URLs match all hosts:

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

Note that you may be able to avoid declaring all host permissions using the activeTab permission.

But this is working only once, second time getting error (extension UI is open while we try second time), if we launch the popup again by clicking extension icon it works fine.

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

Following are details

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);

});

If we add "*://localhost/*" (this works for localhost), there is another way to specify for all hosts *://*/* (not sure if this is right and secure way), refresh button is working multiple times without relaunching popup UI. Is there a difference between activeTab vs URL based permissions and any specific way is recommended over another due to specific reasons?

Upvotes: 1

Views: 2127

Answers (1)

holmberd
holmberd

Reputation: 2609

The activeTab gives permission temporarily until the tab is navigated or closed. My guess is that by reloading the tab when hitting refresh revokes the activeTab permissions. Avoid using window.location.reload or specify the url match for the domain you are trying to execute a script on.

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

The activeTab permission gives an extension temporary access to the currently active tab when the user invokes the extension - for example by clicking its browser action. Access to the tab lasts until the tab is navigated or closed.

Upvotes: 6

Related Questions