也許有人已經遇到了這個問題。
我需要使所有外部鏈接在新的瀏覽器選項卡中打開。
Ext.js - 在新選項卡中打開所有外部鏈接
的解決方案似乎簡單:只是增加target="_blank"
與外部域的各個環節,但我怎麼能實現它的一個很好的方式,因爲整個應用程序是用Ext.js.
也許有人已經遇到了這個問題。
我需要使所有外部鏈接在新的瀏覽器選項卡中打開。
Ext.js - 在新選項卡中打開所有外部鏈接
的解決方案似乎簡單:只是增加target="_blank"
與外部域的各個環節,但我怎麼能實現它的一個很好的方式,因爲整個應用程序是用Ext.js.
我決定回答我的問題,因爲也許這將是任何人都非常有用。 捕捉鏈接上所有點擊的唯一方法是控制身體點擊(正如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";
}
});
希望這個代碼將保存有同樣問題的google搜索某人的幾個小時:)
您更改目標的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');
}
}
請務必使用實際的URL
訣竅可以用事件代理來完成,以取代 「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';
});
然後應用處理器只現有的鏈接。但是,代表團也處理事後創建的元素。如果您希望僅在特定容器中包含鏈接的此類行爲,則可以將'正文'更改爲與該容器匹配的任何選擇器。
這裏是jsfiddle