2016-12-12 71 views
7

我在我的Chrome擴展中有這麼一小段代碼,所以我可以使用<div href="url">作爲鏈接。 這用於直到最近才按預期工作。 (左 - 在當前選項卡中打開,中間 - 在新選項卡中打開)。現在它只註冊左鍵單擊。中間按鈕點擊事件

$('div.clickable-href').on('click', function(e) { 
    switch(e.which) { 
    case 1: 
     window.location = $(this).attr('href'); 
     break; 
    case 2: 
     window.open($(this).attr('href')); 
     break; 
    case 3: 
     break; 
    } 
}); 

我用<div href="url"><span href="url">的鏈接,以便瀏覽器不顯示狀態欄。

我發現了一些類似的問題,但所有的答案建議使用.on('mousedown', (e) => {...})。只有在發生mousedown事件後mouseup事件時,才需要觸發此事件。
更令人沮喪的是,這曾用於,但它不再這樣做。


編輯:
這是爲Chrome 55在Linux(在這裏我首先注意到的異常)的Chrome已經更新到V55的問題。在我的Windows系統上,它是v54,並且中間點擊正在工作。從54更新到55導致了相同的問題。

+0

請注意,用戶可能希望您的「鏈接」在做ap時也在新標籤頁中打開rimary點擊持有密鑰(在Mac上爲)。你也必須處理這些情況,以及可能的其他特定於平臺的約定,這是你無法預料的。嘗試找到一種方法來爲鏈接使用真正的錨點元素,並讓瀏覽器最好地處理它。 –

回答

11

我注意到一個問題鼠標按鈕#3鉻(沒有在其他瀏覽器上測試它)。

因此,這裏是它的修復(添加contextmenu到觸發事件):


編輯
由於MatevžFabjančičuse的有用的註釋。

我可以證實,由於鉻55(我更新了它一分鐘前),鼠標中鍵單擊現在觸發新auxclick事件。
所以一個click事件只能通過鼠標按鈕1

通知auxclick由鼠標按鈕2和3

Reference here觸發來觸發。

$('div.clickable-href').on('click auxclick contextmenu', function(e) { 
 
    e.preventDefault(); 
 
    console.log(e.which); 
 
    console.log(e.type); 
 
    
 
    if(e.type=="contextmenu"){ 
 
     console.log("Context menu prevented."); 
 
     return; 
 
    } 
 
          
 
    switch(e.which) { 
 
     case 1: 
 
      //window.location = $(this).attr('href'); 
 
      console.log("ONE"); 
 
      break; 
 
     case 2: 
 
      //window.open($(this).attr('href')); 
 
      console.log("TWO"); 
 
      break; 
 
     case 3: 
 
      console.log("THREE"); 
 
      break; 
 
    } 
 
});
.clickable-href{ 
 
    width:20em; 
 
    background-color:#DDD; 
 
    text-align:center; 
 
    padding:4em 0; 
 
    border-radius:8px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="clickable-href"> 
 
    CLICK ME - Test all 3 mouse buttons! 
 
</div>

+1

這隻會觸發1和3。我開始認爲這是Chrome for Linux的問題...... –

+1

這是Chrome 55的一個問題。在Linux上(我第一次注意到這個異常),Chrome已經更新到v55。在我的Windows系統上,它是v54,並且中間點擊正在工作。從54更新到55導致了相同的問題。 –

+0

我也確認。我找到了答案。 ;) –

3

在Linux的Chrome瀏覽器55將發生以下事件對我來說:

鼠標按鈕1:click
鼠標按鍵2:contextmenu
鼠標中鍵:auxclick