Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension Chrome扩展在新选项卡上打开新选项卡_Google Chrome Extension - Fatal编程技术网

Google chrome extension Chrome扩展在新选项卡上打开新选项卡

Google chrome extension Chrome扩展在新选项卡上打开新选项卡,google-chrome-extension,Google Chrome Extension,我已经创建了一个Chrome扩展,作为其操作的一部分,它打开一个带有指定url的新选项卡 chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) { if( request.message === "open_new_tab" ) { chrome.tabs.create({"url": request.url}); } } ); (完整代码可在上获得) 这在

我已经创建了一个Chrome扩展,作为其操作的一部分,它打开一个带有指定url的新选项卡

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if( request.message === "open_new_tab" ) {
      chrome.tabs.create({"url": request.url});
    }
  }
);
(完整代码可在上获得)

这在带有网页的选项卡上可以很好地工作,但我无法让它在空选项卡上工作,例如:
chrome://apps/
为了澄清,如果我打开了一个选项卡,并且它位于stackoverflow.com上,那么当我单击扩展按钮时,它会打开一个新选项卡,加载生成的url。当我在一个新的选项卡上,或者是一个url以
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" ]
  }]
}
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});
    }
  }
);

看起来好像没有执行background.js文件。我怀疑这是一个错误。我需要什么权限才能在每个选项卡中运行此扩展?

好的,此消息应该来自您试图注入当前选项卡的内容脚本

出于安全原因,access中最宽的是
。没有覆盖

  • chrome://
    URL(也称为WebUI)因安全原因被排除在外。标志中有手动覆盖:
    chrome://flags/#extensions-在chrome URL上,但你永远也不能指望它会出现

  • 上述情况有一个例外,
    chrome://favicon/
    如果您声明了确切的权限,则可以访问URL


  • 总而言之,即使拥有最广泛的权限,您也无法确定自己是否具有访问权限。请检查
    executeScript
    回调中的
    chrome.runtime.lastError
    ,然后优雅地失败。

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

    chrome.browserAction.onClicked.addListener(function(tab) {
            //... 
            chrome.tabs.create({"url": newTabUrl});
            //...
    });
    

    因此,当我点击我的按钮时,上面的代码被调用,使用附带的jquery脚本。

    你的问题很不清楚。我可以猜出你的意思(你的一些其他代码在
    chrome://apps/
    ),但例如,此代码将打开
    chrome://apps/
    如果需要,在选项卡中。除非您改进问题,否则我不会回答。如果我在加载stackoverflow.com的选项卡上,单击我的扩展按钮将执行代码,并将打开一个新选项卡,其中包含扩展生成的url。当我在新选项卡上或选项卡开始时使用
    chrome://
    打开扩展按钮时,扩展按钮似乎不起作用。然后,您没有显示实际不起作用的代码。这段代码很好,没有被调用。为了提供帮助,我需要知道您的其他代码的作用。我已将代码包含在清单和背景文件中。我怀疑这是一个Perm正如Xan所写,您不能在内部页面上注入内容脚本。如果将Google或Bing设置为搜索引擎,则在新选项卡页面上会出现独占情况。然后您可以将脚本注入该选项卡,但如果设置了任何其他引擎,我想这是不可能的(这两种方法都适用于iFrame,你可以在其中注入一些东西,这是我个人的经验,也许还有其他机制)。顺便说一句,你的按钮代码可以在任何页面上运行,也许你可以基于此创建逻辑(如果tab.urlchrome://something 通知用户)如果你马上就要离开了,那么尝试注入一些东西有什么意义呢?更重要的是,如果这对每个页面都有效,那么内容脚本中有什么类型的代码?我在内容脚本中没有任何代码。它已经被删除了。插件的用途是当用户单击按钮执行ajax调用时获取xml响应,处理响应并根据结果打开另一个页面的选项卡。所有这些都不需要访问选项卡内容。最初,用户单击执行内容脚本(执行ajax位和处理)的按钮,然后将消息发送回后台脚本,该脚本是要打开的新选项卡url。现在,所有的内容都包含在后台脚本中。为什么还有一个尝试注入jQuery?jQuery被包含在插件中,并作为清单的一部分被加载。<代码> Chrome。Tabes。ExtrutEsScript < /Cord>位正在后台运行jQuery,这样剩下的代码就可以工作了。解决方案的t…”chrome.tabs.executeScript位在后台运行jQuery“不,不!使用null调用它会尝试将其注入当前选项卡,而不是后台。这就是我试图做的,修复我无意中发现的(概念)错误。