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

时间:2015-04-20 15:32:57

标签: javascript c# webbrowser-control internet-explorer-11 openlayers-3

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

当我将网页本身加载到IE 11浏览器时,一切都在地图上正常运行。

当我在c#应用程序中时,除了我无法点击地图并拖动它之外,所有内容都会加载而不会出错。

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

我可以使用箭头键移动地图,滚轮鼠标也可以工作。

我注意到当我本地使用IE 11,并使用开发人员工具"打破所有异常"时,我在ol3中检查是否支持PointerEvent.HAS_BUTTONS时出现错误,说对象不支持这一行动。

错误在ol-debug.js的第44619行,使用ol-3.4.0

注意:是的,我已为我的应用程序名称的32位和64位密钥设置了browser_emulation的正确注册表值,并为应用程序的vhost.exe版本设置了正确的注册表值。

更新

我还应该注意,如果我使用

map.on('click', function(e) { 
    //do stuff
    });

没有解雇...但是,如果我使用jquery并且

$(map.getViewport().on('click', function(e) {
//do stuff
});

...然后我的点击活动有效......

5 个答案:

答案 0 :(得分:3)

我知道这是一个迟到的帖子,但希望如果他们偶然发现它可能对其他人有所帮助。

我在同一条船上:使用兼容性设置为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问题。

答案 1 :(得分:1)

所以,我决定回到IE10。一切都在本机浏览器和WebBrowser控件中都有效。

IE11打破了太多东西,并不值得升级&#34;在这个时间点。

我将来会检查CefSharp,还没有足够的时间进入即将发布的版本。

答案 2 :(得分:0)

几个月前,我和你的情况相同。非工作鼠标事件,只是第一个症状。我强烈建议你使用Chromium,因为最后,你没有使用IE11(Web浏览器控件基于IE9内核),你只能影响&#34;有点&#34;它是如何工作的,但是:如果你有一个复杂的问题,你无法真正更新浏览器,调试等。 Chromium工作得非常好,您可以将它完全嵌入到您的解决方案中,将其单独设置为调试或测试,并且它基于现代镀铬。 要将其集成到.net解决方案中,您可以使用:

https://github.com/cefsharp/CefSharp

此致

答案 3 :(得分:0)

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

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

有关旧版输入模型的详细信息,请阅读this

答案 4 :(得分:0)

在winforms中,ol3 / WebBrowser出现了很多问题,就像许多功能无法正常工作一样; 在HTML标头中添加完此代码后,它就完美了:

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