2012-10-13 142 views
1

我有一个简单的Chrome扩展,点击一些URL后会打开新的Chrome标签。 我使用的成功简单的在线的JavaScript如何在Chrome扩展中打开新标签(Manifest v2)

... 
<script type="text/javascript"> 
function LaunchURL(oURL) { 
var launchType = localStorage["LS_LaunchType"];   
    switch (launchType) { 
     case "TN": 
      chrome.tabs.create({ url: oURL }); 
      break; 
     case "WN": 
      chrome.windows.create({ url: oURL }); 
      break; 
     default: 
      chrome.tabs.create({ url: oURL }); 
      break; 
    } 
} 
</script> 
... 
<a href="javascript:LaunchURL('http://foo.com')">My hyperlink</a> 

我想升级的manifest.json 2版本,但现在在行脚本被阻止出于安全原因。 如何打开新标签页? 我试图创建一个单独的JavaScript文件与以前的功能,但没有成功。

+1

编辑:谷歌上搜索一些我已经找到了一个简单的修复后: ** ** My hyperlink 工作正常。 – eang

回答

0

你有什么应该在外部JavaScript文件中正常工作,但你需要从锚标记中删除脚本。相反,只需在锚标记中添加url,并在javascript中添加一个事件侦听器,以防止默认操作。

所以在你的页面有:

<script src="external.js"></script> 
<a href="http://foo.com">My hyperlink</a> 

而且在external.js您有:

document.addEventListener("DOMContentLoaded", function() { 

    var anchors = document.querySelectorAll("a"); 
    for (var i = 0; i < anchors.length; i++) { 
     anchors[i].addEventListener("click", function(event) { 
      LaunchURL(event.currentTarget.href); 
      event.preventDefault(); 
     }); 
    } 

    function LaunchURL(oURL) { 
     var launchType = localStorage["LS_LaunchType"];   
      switch (launchType) { 
       case "TN": 
        chrome.tabs.create({ url: oURL }); 
        break; 
       case "WN": 
        chrome.windows.create({ url: oURL }); 
        break; 
       default: 
        chrome.tabs.create({ url: oURL }); 
        break; 
      } 
     } 
}); 
+0

谢谢。但仍然没有工作。 Chrome-Developer-Console显示“Uncaught ReferenceError:anchor is not defined”,参考第23行[** LaunchURL(anchor.href); **] – eang

+0

我已经编辑了答案,所以现在试试'event.currentTarget .href“而不是'anchor.href',它应该从click事件中读取它。 – slashnick

相关问题