ol3 与 IE11 在 c# webbrowser 控制鼠标单击事件不工作

ol3 with IE11 in a c# webbrowser control mouse click events not working

我已经 "upgraded" 在使用 webbrowser 控件的 c# 应用程序中将浏览器升级到 IE 11。

当我将我的网页加载到 IE 11 浏览器中时,地图上的一切正常。

当我在 C# 应用程序中时,除了我无法单击并拖动地图之外,所有内容都可以正常加载。

我的所有地图点击事件也不会触发。

我可以用方向键移动地图,滚轮鼠标也可以。

我注意到,当我在本机使用 IE 11 并将开发人员工具与 "Break on all exceptions" 一起使用时,我在 ol3 检查是否支持 PointerEvent.HAS_BUTTONS 时收到错误消息,说对象不支持'不支持这个动作。

错误在 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
});

...然后我的点击事件起作用....

几个月前我和你的情况一样。非工作鼠标事件只是第一个症状。我强烈建议你为此使用 Chromium,因为最后你没有使用 IE11(Webbrowser 控件基于 IE9 内核),你可以影响 "a bit" 它的工作方式,但是:如果你有一个复杂的问题,您无法真正更新您的浏览器,进行调试等。 Chromium 工作得非常好,您可以将它完全嵌入到您的解决方案中,单独为它加星以进行调试或测试,它基于现代 chrome。 要将其集成到 .net 解决方案中,您可以使用:

https://github.com/cefsharp/CefSharp

此致

所以,我决定回滚到 IE10。在本机浏览器和 WebBrowser 控件中一切正常。

IE11 破坏了太多东西,现在不值得 "upgrade"。

我以后会检查 CefSharp,只是没有足够的时间投入即将发布的版本。

我知道这有点晚了 post,但希望它能对偶然发现它的其他人有所帮助。

我的处境完全相同:使用兼容性设置为 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 问题。

该问题与遗留输入模型有关,该模型默认为应用程序托管的 WebBrowser 控件启用。

要让您的 OpenLayers3 应用程序正常工作,您必须在注册表中禁用它。为此,您必须将应用程序的 FEATURE_NINPUT_LEGACYMODE 设置为 0。如果您的 FeatureControl 分支中不存在此密钥,您必须手动创建它。

有关旧输入模型的更多信息,请阅读 this

我在 winforms 中遇到了很多关于 ol3 / WebBrowser 的问题,比如很多功能不能正常工作; 我在 HTML header 中添加了这个之后,就完美了:

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=10,chrome=1" />