Ext.js -在新选项卡中打开所有外部链接

Ext.js - Open all external links in a new tab

本文关键字:链接 外部 js 新选项 选项 Ext      更新时间:2023-09-26

也许有人已经遇到过这个问题了。
我需要使所有外部链接在一个新的浏览器选项卡中打开。

解决方案似乎很容易:只是将target="_blank"添加到外部域的每个链接,但我如何才能以一种很好的方式实现它,因为整个应用程序都是用Ext.js编写的。

使用JavaScript更改目标属性:

var tlinks = document.getElementsByTagName('a');
    for (var i=0;i<tlinks.length;i++){
        if (tlinks[i].href.indexOf('http://www.yourownurlhere.com') == -1) {
            tlinks[i].setAttribute('target', '_blank');
        }                
    }

请记住将"yourownurlhere.com"替换为您的实际url

这个技巧可以通过事件委托来完成。

Ext.select('body').on('click', function (e, el) {
    el.target = '_blank';
}, null, {delegate: 'a'});

注意如果你只写

Ext.select('a').on('click', function (e, el) {
    el.target = '_blank';
});

则只对现有链接应用处理程序。但是,委托也处理之后创建的元素。如果你希望链接只包含在某个容器中,你可以将'body'更改为与该容器匹配的任何选择器。

你可以这样做:

窗口。打开("你的链接");

我决定回答我自己的问题,因为它可能对任何人都有用。捕获所有链接点击的唯一方法是控制主体点击(正如triclozan在他的回答中所写)。

这段代码将在点击后修改每个链接,并在新窗中打开它:

Ext.getBody().addListener('click', function (event, el) {
    var clickTarget = event.target;
    if (clickTarget.href && clickTarget.href.indexOf(window.location.origin) === -1) {
        clickTarget.target = "_blank";
    }
});

希望这段代码将节省几个小时的谷歌搜索的人有同样的问题:)