将箭头键重置为默认行为

Reset arrow keys to default behaviour

本文关键字:默认      更新时间:2023-09-26

我注意到我的箭头键被Bing地图劫持了,不再滚动页面。

无论如何,通过JavaScript将箭头键重置为默认行为?

最后我找到了可以使用的bing的keydown事件。因此,当用户的光标在bing地图内(不会占据整个页面)时,用户仍然可以放大和缩小/点击拖动来平移。然而,当他们通常在站点的箭头键上按下时,这不应该影响bing地图。

在初始化新的Microsoft.Maps后,我发现我可以添加一个处理程序来取消地图的keydown事件:

Microsoft.Maps.Events.addHandler(map, 'keydown', cancelEvent)

对于Firefox使用document.activeElement.blur(),对于IE使用window.focus(),而对于Webkit使用document.activElement=document来重新获取焦点:

<!doctype html>
<html lang="en">
<head>
    <title>Blur Object Test</title>
</head>
<body>
<object id="bingmap" data="http://www.bing.com/maps"></object>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<script type="text/javascript">
  document.activeElement.blur(); window.focus(); document.activeElement = document;
</script>
</body>
</html>

如果Webkit不一致,请使用鼠标悬停事件:

function takeback()
    {
    while(RegExp("object","i").test(document.activeElement.nodeName) )
      {
      window.focus();
      document.activeElement.blur();
      }
    return false;
    }
  if (!!document.addEventListener)
    {
    document.addEventListener("mouseover", takeback, false);
    }
  else
    {
    window.focus();
    }

如果您想完全阻止映射与键盘事件交互,我认为最好的解决方案是在初始化映射时使用"disableKeyboardInput"属性。

  // Initialize the map
  map = new Microsoft.Maps.Map(document.getElementById("myMap"), {
   credentials:"Bing Maps Key",
   disableKeyboardInput: true
  }); 

发件人:http://social.msdn.microsoft.com/Forums/en-US/2807cbc3-0f88-4415-b2a9-09e950d210f7/issue-with-bing-maps-while-pressing-the-down-or-up-arrow

要在不破坏其他JavaScript(即删除keybinds但保留其他页面功能)的情况下停止此行为,您需要破坏影响keybinds的特定JavaScript调用(并且只破坏它们)。

最简单的方法是使用GreaseMonkey和像这样的预先制作的脚本:禁用网站键盘挂钩