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


79

在我的Stackoverflow文件夹中,有stackoverflow.ico2个波纹管文件。将其导入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>

Answers:


116

问题在于您违反清单2的清单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 });
});

如果出于某种原因确实需要将其作为页面,则只需像以前一样将脚本作为外部文件包含在内并声明为页面即可。


如何从popup.js发送newURL?
Nikhil Kulkarni

17

在我的情况下,我需要在扩展弹出窗口中单击链接时在新选项卡中打开链接,它在将target属性设置为时工作良好_blank

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

5
好吧,这将在浏览器中打开新选项卡,但它将关闭弹出窗口(并非总是如此)。
fvrab

5

我希望使用更简单的解决方案-只需将操作添加到onclick

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

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


你在哪里叫这个?我的意思是写在content.js或background.js下吗?
gumuruh

它写在content.js中
fvrab
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.