繁体   English   中英

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

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

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

解决方案似乎很简单:只需将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”替换为您的实际网址

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

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 ”更改为与该容器匹配的任何选择器。

这是jsfiddle

我决定回答我自己的问题,因为它可能对任何人都有用。 捕获链接上所有点击的唯一方法是控制身体点击(正如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";
    }
});

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

你可以简单地做:

window.open(“你的链接”);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM