2012-03-19 59 views
3

我注意到我的箭头键已被Bing地图劫持,不再滚动页面。将箭头键重置为默认行为

无论如何重置箭头键到JavaScript的默认行为?

+0

所以你怎么想,我们回答这个问题?你能否复制这种情况,让所有人都能看到? – Joseph 2012-03-19 04:44:07

+0

禁用JavaScript。根据浏览器和安装的扩展名,您可以选择性地禁用脚本。 – RobG 2012-03-19 05:30:30

+0

与今天的大多数网站一样,禁用JavaScript不是一种选择。要复制,只需将Bing映射添加到任何网页。 – bcm 2012-03-21 02:47:59

回答

3

最后我找到了可以使用的bing的keydown事件。所以会发生的是,用户仍然可以放大和缩小/点击拖动,以便在光标位于bing地图内时(不占用整个页面)。但是,当他们一般地关注网站的箭头键时,这应该不会影响bing地图。

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

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

谢谢。你是如何弄清楚API调用的? – 2012-07-23 17:49:02

+0

我去寻找keydown处理程序(它必须存在的行为来坚持),并找到了文件取消它。更倾向于尝试覆盖(又名hack)解决方案。 – bcm 2012-08-01 16:00:03

+0

我试过这个答案,它可以工作,但它似乎会导致其他问题,它仍然在地图插件外面的keydown事件中发生混乱。我发现一个更好的方法是在mapOptions中设置disableKeyboardInput:true。另一个选项似乎是在初始化后调用map.blur(),如果你仍然希望键盘输入可用在地图上。 – 2014-07-08 15:35:47

0

使用document.activeElement .blur()用于Firefox,window.focus()的用于IE,和document.activeElement =文档的Webkit夺回焦点:

<!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(); 
    } 
+0

谢谢保罗仔细想出答案...我会发布我使用的 – bcm 2012-07-23 04:55:03

0

为了不破坏其他JavaScript(即除去keybinds但保留其他页面的功能)停止这种行为,你需要打破特定的JavaScript调用影响keybinds(其中只有)。

要做到这一点,最简单的方法是使用的GreaseMonkey和预制的脚本,像这样的:Disable website keyboard hooks