2011-12-01 36 views
6

大多數新型瀏覽器支持命令ctrl+clickcommand+click或類似的打開新標籤頁或新窗口中的鏈接。確定onclick單擊的鏈接是否打算打開一個新窗口或標籤

在應用程序中,我希望鏈接在點擊時被禁用。但是,只有當目標是相同的窗口時(例如,如果它在新標籤中打開,我不希望鏈接被禁用,因爲再次點擊它是合理的)。

我做了一些嘗試並調試了單擊時創建的事件對象 - 但我找不到有關目標是新選項卡還是新窗口的任何信息。

已知的解決方法:當然,可以檢查某個鍵是否在點擊特定鏈接時被按下,這是一件容易的事情 - 但由於這些命令因瀏覽器和瀏覽器而不同,從操作系統到操作系統不同,所以必須定義一個複雜的映射和誰不知道用戶配置了什麼等等。

是否有任何可靠的方式來確定位置是否應在新選項卡或窗口中打開?

回答

3

在這裏,你有一個工作的例子:http://jsfiddle.net/pioul/eCuNU/4/

該腳本將只允許如果該鏈接會在一個新的標籤/窗口中打開的基礎上,target="_blank"屬性的鏈接點擊。

HTML:

<a href="http://google.fr" target="_blank">new window</a> 
<a href="http://google.fr" target="_self">same window 1</a> 
<a href="http://google.fr" target="">same window 2</a> 

的jQuery:

$("a").bind("click", function(e){ 
    if($(this).attr("target") != "_blank"){ 
     e.preventDefault(); 
    } 
}); 

編輯:

你可以考慮按Ctrl +點擊這樣的:

$("a").bind("click", function(e){ 
    if($(this).attr("target") != "_blank"){ 
     if(!e.ctrlKey){ 
      e.preventDefault(); 
     } 
    } 
}); 
+1

那麼,這隻適用於一個固定的目標屬性。如果用戶通過按住ctrl(或類似的)來「覆蓋」這個屬性,那麼該屬性當然不會改變,因此測定失敗。 – Remo

+1

我編輯了我的答案以符合您談論的情況,我想除了考慮用戶可以在新窗口中打開鏈接並嘗試在代碼中檢測它的每種方式之外,沒有其他解決方案。 – Pioul

0

有些時候,它由瀏覽器設置設置爲打開新標籤頁或同一窗口中的鏈接。

您可以檢查鏈接對象的目標屬性。

<a href="http://your_link_to_page" target="_blank" >This open in new window</a> 

使用javascript在頁面加載時操縱錨標籤並檢查目標屬性。如果目標值設置爲_blank,則啓用它們,或者您可以在用戶單擊鏈接時執行此檢查。

您可以使用一種機制來查找單擊鏈接時按下的CTRL。有一些資源,如this。你可以建立一個系統。

注意:如果您使用的是JQuery,則使用不同的類對必須檢查的鏈接進行分類。並在就緒狀態或鏈接被點擊時禁用它們。

+0

不幸的是,如果用戶通過按住'ctrl'強制一個新的選項卡,這仍然不適用,是嗎? – Remo

+0

您必須先檢測發生鼠標停止事件時按下的鍵。該檢查必須在全局範圍內完成(即在頁面範圍內)。根據按鍵設置一個jS變量。然後在點擊事件內部進行其餘的檢查。 –

0

您無法阻止瀏覽器在新選項卡或窗口中打開鏈接。可能有(無法測試的)配置設置強制這個,或者想想鼠標手勢:右鍵單擊並向下移動將在Opera中打開一個新選項卡,我想這是無法檢測的。

此外,強制瀏覽器在新窗口中打開選項卡(target="_blank"或甚至window.open)被認爲是不好的樣式。你應該讓用戶選擇他想做的事情。如果你真的想這樣做,你也可以考慮window.onunload這應該是最有效的工作。

+0

嗯,這不是關於阻止或強制任何事情 - 而是**檢測**鏈接是否會在新窗口中打開 - 就這些了。 – Remo

相關問題