【问题标题】:How to open new tab in Chrome Extensions (Manifest v2)如何在 Chrome 扩展中打开新标签页(Manifest v2)
【发布时间】:2012-10-15 20:15:52
【问题描述】:

我有一个简单的 Chrome 扩展程序,可以在单击某些 URL 时打开新的 Chrome 选项卡。 我成功地使用了一个简单的内联 javascript

...
<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 文件,但没有成功。

【问题讨论】:

  • 编辑:经过一番谷歌搜索后,我找到了一个简单的修复方法:foo.com" target="blank">我的超链接工作正常.

标签: javascript html google-chrome


【解决方案1】:

您所拥有的应该可以在外部 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;
            }
        }
});

【讨论】:

  • 谢谢。但仍然无法正常工作。 Chrome-Developer-Console 说“Uncaught ReferenceError: anchor is not defined”,参考第 23 行 [LaunchURL(anchor.href);]
  • 我已经编辑了答案,所以现在尝试使用event.currentTarget.href 而不是应该从点击事件中读取的anchor.href
猜你喜欢
  • 2012-03-23
  • 2017-11-14
  • 2013-05-06
  • 2011-06-26
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
相关资源
最近更新 更多