我使用webbrowser控件在c#应用程序中为浏览器“升级”到IE 11。
当我将我的网页本身加载到IE 11浏览器时,一切都在地图上正常工作。
当我在c#应用程序中时,除了我无法单击地图并拖动它之外,所有内容都会加载而不会出现错误。
我的所有地图点击事件也不会触发。
我可以使用箭头键移动地图,滚轮鼠标也可以工作。
我注意到,当我本地使用IE 11,并使用开发人员工具“Break on all exceptions”时,我在ol3中检查是否支持PointerEvent.HAS_BUTTONS时出现错误,说Object不支持此操作。
错误在ol-debug.js的44619行,使用ol-3.4.0
注意:是的,我为我的应用程序名称的32位和64位密钥以及应用程序的vhost.exe版本设置了browser_emulation的正确注册表值。
更新:
我还应该注意,如果我使用
map.on('click', function(e) {
//do stuff
});
什么都没有被解雇......但是,如果我使用jquery并且做到了
$(map.getViewport().on('click', function(e) {
//do stuff
});
...然后我的点击事件工作....
我知道这是一个迟到的帖子,但希望如果他们偶然发现它可能对其他人有所帮助。
我在同一条船上:使用兼容性设置为IE11的WebBrowser控件导致OpenLayers 3在显示2D地图时忽略鼠标按钮单击。我试过CefSharp 3,果然它解决了这个问题,但还有其他原因导致我无法使用它。经过大量的反复试验,我偶然发现了这个可行的解决方案:
<meta http-equiv="X-UA-Compatible" content="IE=11" />
<script>
if (navigator.appVersion.indexOf("MSIE 7.") !== -1)
{
delete window.PointerEvent;
window.navigator.msPointerEnabled = false;
}
</script>
这需要在包含ol.js之前的页面上。
这是对页面是否在WebBrowser控件中运行的粗略测试,但是现在应该已经足够了,因为IE7不再受支持了。 “MSIE 7”的唯一真实实例。在用户代理字符串中将来自默认的WebBrowser控件。
我还没有找到任何其他OpenLayers问题。
所以,我决定回到IE10。一切都在本机浏览器和WebBrowser控件中都有效。
IE11打破了太多东西,目前还不值得“升级”。
我将来会检查CefSharp,还没有足够的时间进入即将发布的版本。
我和几个月前的情况相同。非工作鼠标事件,只是第一个症状。我强烈建议你使用Chromium,因为最后,你没有使用IE11(Webbrowser控件基于IE9内核),你只能影响“有点”它是如何工作的,但是:如果你有一个复杂的问题,你无法真正更新你的浏览器,调试等.Chromium工作得非常好,你可以将它完全嵌入你的解决方案中,将它单独加以调试或测试,它基于现代的chrome。要将其集成到.net解决方案中,您可以使用:
https://github.com/cefsharp/CefSharp
问候
该问题与遗留输入模型有关,该模型默认为应用程序托管的WebBrowser控件启用。
要使OpenLayers3应用程序正常工作,您必须在注册表中禁用它。要做到这一点,你必须为你的应用程序设置FEATURE_NINPUT_LEGACYMODE
到0
。如果FeatureControl
分支中不存在此键,则必须手动创建。
有关遗留输入模型的更多信息,请阅读this。
我在winforms中遇到了很多关于ol3 / WebBrowser的问题,比如很多功能都运行不好;在HTML标题中添加后,它非常完美:
<head>
<meta http-equiv="X-UA-Compatible" content="IE=10,chrome=1" />