Chrome扩展程序在新标签页上打开新标签页

Ric*_*ing 4 google-chrome-extension

我创建了一个Chrome扩展程序,作为其操作的一部分,它会打开一个带有指定网址的新标签.

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if( request.message === "open_new_tab" ) {
      chrome.tabs.create({"url": request.url});
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

(GitHub上提供完整代码)

这在带有网页的选项卡上工作正常,但我不能让它在空选项卡上工作,例如:chrome://apps/为了澄清,如果我打开了一个选项卡并且它位于stackoverflow.com上,那么当我点击我的扩展按钮时它会打开一个新标签加载生成的网址.当我在新标签页或者网址开头的标签页上时chrome://,扩展程序不起作用.

我需要包含哪些权限才能允许在任何标签中打开扩展程序?包括新标签和任何chrome://标签?

manifest.json的:

{
  "manifest_version": 2,

  "name": "MyMiniCity Checker",
    "short_name": "MyMiniCity Checker",
  "description": "Checks what your city needs most and redirects the browser accordingly.",
  "version": "0.2",
    "author":"Richard Parnaby-King",
    "homepage_url": "https://github.com/richard-parnaby-king/MyMiniCity-Checker/",
    "icons": {
      "128": "icon-big.png"
   },

    "options_page": "options/options.html",

  "browser_action": {
    "default_icon": "icon.png"
  },
    "permissions": ["tabs","storage","http://*.myminicity.com/","http://*/*", "https://*/*"],
    "background": {
    "scripts": ["background.js"],
    "persistent": false
    },
    "content_scripts": [ {
    "matches": [ "http://*/*", "https://*/*"],
    "js": [ "jquery-1.11.3.min.js" ]
  }]
}
Run Code Online (Sandbox Code Playgroud)

Background.js:

//When user clicks on button, run script
chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.executeScript(null, { file: "jquery-1.11.3.min.js" }, function() {
    chrome.tabs.executeScript(null, { file: "contentscript.js" });
    });
});

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if( request.message === "open_new_tab" ) {
      chrome.tabs.create({"url": request.url});
    }
  }
);
Run Code Online (Sandbox Code Playgroud)

看起来好像没有执行background.js文件.我怀疑这是一个权限.为了在每个标签中运行此扩展,我需要什么权限?

Xan*_*Xan 7

好吧,这条消息应该来自你试图注入当前标签的内容脚本.

最宽的可以申请许可"<all_urls>",但是,仍然有被排除在访问URL.

  1. 您只可以正常访问http:,https:, file:ftp:计划.

  2. file:scheme需要用户手动批准访问权限chrome://extensions/:

<code>chrome://</code><strong>出于安全原因,排除</strong> URL(也称为WebUI).旗帜中有一个手动覆盖:<code>chrome://flags/#extensions-on-chrome-urls</code>但你永远不能指望它在那里.</p></li>
<li><p>上述情况有一个例外,<code>chrome://favicon/</code>如果您声明了确切的权限,则可以访问URL.</p></li>
</ol>

<p>总而言之,即使拥有最广泛的权限,您也无法确定是否可以访问.检查<code>chrome.runtime.lastError</code>回调<code>executeScript</code>和优雅失败.</p></p>
        <ul class=


Ric*_*ing 5

由于我希望它在每个页面上运行,这意味着我无法在内容脚本中包含代码。我将所有代码移至后台脚本中:

chrome.browserAction.onClicked.addListener(function(tab) {
        //... 
        chrome.tabs.create({"url": newTabUrl});
        //...
});
Run Code Online (Sandbox Code Playgroud)

因此,当我单击按钮时,将使用随附的 jquery 脚本调用上面的代码。