ol3与嵌入式IE11 WebBrowser控件(WPF),鼠标单击事件不起作用

时间:2015-07-14 04:16:07

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

我在 WPF 应用程序中使用 WebBrowser 控件,使用 ol3(openlayers3)强化Open Street 地图(osm) STRONG>。它在IE11浏览器中工作正常,但鼠标事件在嵌入式 IE11 WebBrowser控件中不起作用。如果我将我的WebBrowser设置为模拟IE10,则会触发鼠标事件,但3d视图(Cesium)不起作用。

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

中的一个

我想使用IE11,因为我需要使用ol3-Cesium渲染地图的3d地球视图。所有鼠标单击事件在3d globe视图中都能正常工作,但是当我禁用3d视图并启用2D视图时,鼠标事件不会触发。我不确定我是否错过了注册表中的一些更改。

我也跟着ol3 with IE11 in a c# webbrowser control mouse click events not working,但我对答案不满意。它建议使用Chromium,因为很少有事件不能与IE11一起使用。但是如果3d globe视图允许事件触发,那么为什么不在ol3中使用2d。请帮忙。

1 个答案:

答案 0 :(得分:1)

在注册表中,启用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 );
         }
      }