我在 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/