2014-03-25 129 views
3

也許有人已經遇到了這個問題。
我需要使所有外部鏈接在新的瀏覽器選項卡中打開。
Ext.js - 在新選項卡中打開所有外部鏈接

的解決方案似乎簡單:只是增加target="_blank"與外部域的各個環節,但我怎麼能實現它的一個很好的方式,因爲整個應用程序是用Ext.js.

回答

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"; 
    } 
}); 

希望這個代碼將保存有同樣問題的google搜索某人的幾個小時:)

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'); 
     }     
    } 

請務必使用實際的URL

2

訣竅可以用事件代理來完成,以取代 「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

相關問題