Ext.js - 在新标签页中打开所有外部链接

3

或许有人已经遇到了这个问题。
我需要将所有外部链接都在新的浏览器标签中打开。

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

4个回答

2

您可以使用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”替换为您实际的网址


2
这个技巧可以通过事件委托来实现。
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


1
您可以简单地这样做:

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


0
我决定回答自己的问题,因为也许对任何人都有用。捕获所有链接点击的唯一方法是控制 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";
    }
});

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接