也许有人已经遇到过这个问题
我需要在新的浏览器标签中打开所有外部链接。
解决方案似乎很简单:只需将target="_blank"
添加到与外部域的每个链接,但我如何以一种很好的方式实现它,因为整个应用程序是用Ext.js编写的。
答案 0 :(得分: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');
}
}
请记得更换&#34; yourownurlhere.com&#34;与您的实际网址
答案 1 :(得分: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';
});
然后您只将处理程序应用于现有链接。但是,委托还处理之后创建的元素。如果您希望仅在某个容器中包含此类链接的行为,您可以更改正文&#39;到任何匹配该容器的选择器。
这是jsfiddle
答案 2 :(得分:0)
我决定回答我自己的问题,因为它可能对任何人都有用。
捕获链接上所有点击的唯一方法是控制身体点击(正如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";
}
});
希望这段代码可以为有同样问题的人节省几个小时的谷歌搜索:)
答案 3 :(得分:0)
您可以轻松做到:
window.open(“您的链接”);