Chrome扩展程序:如何在新标签页中打开链接?

时间:2013-05-12 03:22:36

标签: javascript html google-chrome google-chrome-extension tabs

在我的Stackoverflow文件夹中,我有stackoverflow.ico和2个bellow文件。将其导入Chrome时,它会在地址栏中显示图标,但当我点击它时,Chrome不会打开任何新标签。我做错了什么?

的manifest.json

{
  "name": "Stackoverflow",
  "version": "1",
  "browser_action":
  {
    "default_icon": "stackoverflow.ico"
  },
  "background":
  {
    "page": "index.html"
  },
  "permissions": ["tabs"],
  "manifest_version": 2
}

的index.html

<html>
  <head>
    <script>
      chrome.browserAction.onClicked.addListener(function(activeTab)
      {
        var newURL = "http://stackoverflow.com/";
        chrome.tabs.create({ url: newURL });
      });
    </script>
  </head>
</html>

3 个答案:

答案 0 :(得分:91)

问题是您违反了manifest version 2's content security policy。要修复它,您只需要删除内联脚本,在这种情况下是您的背景page。将其转换为背景script,如下所示:

<强>的manifest.json

"background":{
  "scripts": ["background.js"]
},

<强> background.js

chrome.browserAction.onClicked.addListener(function(activeTab){
  var newURL = "http://stackoverflow.com/";
  chrome.tabs.create({ url: newURL });
});

如果出于某种原因,您确实需要将它作为一个页面,那么只需将该脚本作为外部文件包含,并将其声明为与之前类似的页面。

答案 1 :(得分:2)

对于我来说,我需要在扩展弹出窗口中单击链接时在新选项卡中打开链接,它在target属性设置为_blank的情况下可以正常工作:

<a href="http://www.example.com" target="_blank">Example</a>

答案 2 :(得分:0)

我希望使用simpler solution-只需向onclick添加操作

$('body').on('click', 'a[target="_blank"]', function(e){
    e.preventDefault();
    chrome.tabs.create({url: $(this).prop('href'), active: false});
    return false;
});

这将在新选项卡中打开所有具有target =“ _ blank”属性的链接(甚至是动态创建的链接),而不会失去弹出焦点。