wpf - 嵌入在 WPF 中的浏览器不处理指针事件

标签 wpf winforms browser touch

我在 Windows 7 WPF 应用程序中托管 WebBrowser 控件。

现在我遇到了在这个浏览器中运行的 javascript 的问题。 DOM pointer事件没有触发。当我单击 DOM 对象时,mousedownclick事件触发,但 pointerdown事件不会触发,即使它在 Internet Explorer 11 中查看同一页面时触发。

如何制作 DOM pointerdown事件火?

这是我在浏览器中看到的:

Browser image

这是我在 WPF 应用程序中看到的:

WPF Image

这是我正在测试的 HTML 文档:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=11">
    <script type="text/javascript" src="./scripts/jquery.min.js"></script>
    <title>Raw test page</title>
    <style type="text/css">
        #mouseTarget{
            border: 2px solid purple;
            background: steelblue;
            font-weight: bold;
            width: 300px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="mouseTarget">Mouse Target</div>
    <div id="logOutput"></div>
    <script type="text/javascript">
        var logOutput = function (text) {
            $("<div></div>").text(text).appendTo($("#logOutput"));
        };
        var mouseTarget = document.getElementById('mouseTarget');
        mouseTarget.addEventListener('pointerdown', function () {
            logOutput('pointerdown event received');
        }, false);
        mouseTarget.addEventListener('mousedown', function () {
            logOutput('mousedown event received');
        }, false);
        mouseTarget.addEventListener('click', function () {
            logOutput('click event received');
        }, false);
    </script>
</body>
</html>

最佳答案

编辑:抱歉,该设置似乎不足以触发指针事件。它只是识别触摸事件,但仍然只触发鼠标事件。很烦人...

问题是 WebBrowser 控件的行为不像通常的 IE 实例。首先,它默认使用传统的后备 IE7 模式。其他要点是遗留输入模型等等。

我个人遇到了将 browserMode 设置为 IE10 但指针事件根本不起作用的问题。问题是,WebBrowser 控件假装支持我订阅的 PointerEvents,但由于启用了旧输入模型,这些没有被触发。

您可以在您的应用程序中为该应用程序动态设置这些策略:

private void SetBrowserCompatibilityMode()
    {
        // http://msdn.microsoft.com/en-us/library/ee330720(v=vs.85).aspx

        // FeatureControl settings are per-process
        var fileName = Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName);

        if (String.Compare(fileName, "devenv.exe", true) == 0) // make sure we're not running inside Visual Studio
            return;

        using (var key = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION",
            RegistryKeyPermissionCheck.ReadWriteSubTree))
        {
            // Webpages containing standards-based !DOCTYPE directives are displayed in IE10 Standards mode.
            UInt32 mode = 10000; // 10000; or 11000 if IE11 is explicitly supported as well
            key.SetValue(fileName, mode, RegistryValueKind.DWord);
        }

        using (var key = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_NINPUT_LEGACYMODE",
            RegistryKeyPermissionCheck.ReadWriteSubTree))
        {
            // disable Legacy Input Model
            UInt32 mode = 0;
            key.SetValue(fileName, mode, RegistryValueKind.DWord);
        }

    }

引用:C# WebBrowser PanningMode

关于wpf - 嵌入在 WPF 中的浏览器不处理指针事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23749238/

相关文章:

c# - 检测到 DisconectedContext

c# - winform的优化

c# - 如何将文本从 textBox1 复制到 textBox2,包括空格?

html - INPUT TYPE=FILE 在 Microsoft edge 中不起作用

VBA WebBrowser捕获全屏

javascript - BrowserSync 突然无法连接到浏览器

c# - WPF 应用程序中的复合 ViewModel

wpf - Window.Margin 和 Window.Padding 不起作用

c# - 有什么方法可以阻止 WPF Popup 在离开屏幕时重新定位自身?

c# - System.Collections.IDictionary 不包含 "Settings"的定义?