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

问题描述 投票:0回答:5

我使用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
});

...然后我的点击事件工作....

javascript c# webbrowser-control internet-explorer-11 openlayers-3
5个回答
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
投票

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

IE11打破了太多东西,目前还不值得“升级”。

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


0
投票

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

https://github.com/cefsharp/CefSharp

问候


0
投票

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

要使OpenLayers3应用程序正常工作,您必须在注册表中禁用它。要做到这一点,你必须为你的应用程序设置FEATURE_NINPUT_LEGACYMODE0。如果FeatureControl分支中不存在此键,则必须手动创建。

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


0
投票

我在winforms中遇到了很多关于ol3 / WebBrowser的问题,比如很多功能都运行不好;在HTML标题中添加后,它非常完美:

<head>
    <meta http-equiv="X-UA-Compatible" content="IE=10,chrome=1" />
© www.soinside.com 2019 - 2024. All rights reserved.