c# - 带有嵌入式 IE11 Web 浏览器控件 (WPF) 的 ol3,鼠标单击事件不起作用

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

我在 WPF 应用程序中使用 WebBrowser 控件来渲染 Open Street Maps(osm) 使用 ol3(openlayers3).它在 IE11 浏览器中运行良好,但鼠标事件在嵌入式 IE11 WebBrowser Control 中不起作用。如果我让我的 WebBrowser 模拟 IE10,则会触发鼠标事件,但 3d View (Cesium) 不起作用。

我正在使用 http://openlayers.org/ol3-cesium/examples/main.html举个例子。我在 python 服务器上本地托管它并在 WebBrowser 控件中呈现它。为了运行 WebGL 和 Cesium,我已将 FEATURE_BROWSER_EMULATION 键修改为 11000 并将 FEATURE_GPU_RENDERING 键修改为我的 .exe

中的 1 个

我想使用 IE11,因为我需要使用 ol3-Cesium 渲染 map 的 3d 地球 View 。所有鼠标单击事件在 3d 地球 View 中都可以正常工作,但是当我禁用 3d View 并启用 2d View 时,鼠标事件不会触发。我不确定我是否遗漏了注册表中的某些更改。

我也关注了ol3 with IE11 in a c# webbrowser control mouse click events not working但我对答案并不满意。建议使用 Chromium,因为很少有事件不适用于 IE11。但是,如果 3d 地球 View 允许事件触发,那么为什么不在 ol3 中使用 2d。请帮忙。

最佳答案

在注册表中,打开 FEATURE_GPU_RENDERING,并通过将 FEATURE_BROWSER_EMULATION 设置为 0 来关闭兼容模式。

这段代码对我有用。我发现的大多数答案都建议将 FEATURE_BROWSER_EMULATION 设置为您机器上的最新 IE 版本,但这从未与 Cesium 一起使用。将其设置为 0,即关闭兼容模式确实有效。

    internal static void SetBrowserFeaturesToSupportGpu()
          {
             // FeatureControl settings are per-process
             var fileName = System.IO.Path.GetFileName( Process.GetCurrentProcess( ).MainModule.FileName );
             SetBrowserFeatureControlKey(
             "FEATURE_96DPI_PIXEL",
             fileName,
             1)
             ; // enable hi-dpi support
             SetBrowserFeatureControlKey(
             "FEATURE_BROWSER_EMULATION",
             fileName,
             00000)
             ; // turn off compatibility mode.
             SetBrowserFeatureControlKey(
             "FEATURE_AJAX_CONNECTIONEVENTS",
             fileName,
             1)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_ENABLE_CLIPCHILDREN_OPTIMIZATION",
             fileName,
             1)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_GPU_RENDERING",
             fileName,
             1)
             ; // use GPU rendering
             SetBrowserFeatureControlKey(
             "FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI  ",
             fileName,
             0)
             ; // force directX
             SetBrowserFeatureControlKey(
             "FEATURE_NINPUT_LEGACYMODE",
             fileName,
             0)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_DISABLE_NAVIGATION_SOUNDS",
             fileName,
             1)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_SCRIPTURL_MITIGATION",
             fileName,
             1)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_SPELLCHECKING",
             fileName,
             0)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_STATUS_BAR_THROTTLING",
             fileName,
             1)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_VALIDATE_NAVIGATE_URL",
             fileName,
             1)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_WEBOC_DOCUMENT_ZOOM",
             fileName,
             1)
             ; // allow zoom.
             SetBrowserFeatureControlKey(
             "FEATURE_WEBOC_POPUPMANAGEMENT",
             fileName,
             0)
             ; // disallow auto-popups
             SetBrowserFeatureControlKey(
             "FEATURE_ADDON_MANAGEMENT",
             fileName,
             0)
             ; // disallow auto-addons/plugins
             SetBrowserFeatureControlKey(
             "FEATURE_WEBSOCKET",
             fileName,
             1)
             ;
             SetBrowserFeatureControlKey(
             "FEATURE_WINDOW_RESTRICTIONS",
             fileName,
             0)
             ; // disallow popups
          }


internal static void SetBrowserFeatureControlKey( string feature, string appName, uint value )
      {
         using ( var key = Registry.CurrentUser.CreateSubKey(
             String.Concat( @"Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature ),
             RegistryKeyPermissionCheck.ReadWriteSubTree ) )
         {
            key.SetValue( appName, ( UInt32 ) value, RegistryValueKind.DWord );
         }
      }

关于c# - 带有嵌入式 IE11 Web 浏览器控件 (WPF) 的 ol3,鼠标单击事件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397547/

相关文章:

c# - 是什么自动导致 EF Core 包含集合属性?

wpf - 将 WPF 网页浏览器控件设置为使用 IE10 模式

html - <h :selectOneMenu> dropdown list moving upwards in IE11

javascript - Swiper轮播IE11 bug : images are overstretched

c# - 无法像游戏一样在 2D 太空入侵者中发射激光

c# - MvxSidebarPresentationAttribute 未在演示者字典中配置

c# - 使用 WPF/C# 嵌入 Chromium 而不是 IE WebBrowser 控件的选项

c# - 有没有办法从 WebBrowser 控件跟踪 Internet Explorer 错误消息?

html - 为什么IE11会给出这个警告: HTML1406: Invalid tag start: "<?"

c# - 带有嵌套循环的 Linq XML 查询 - 1