2016-12-12 72 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