Web浏览器控件中的拼写检查无法在IE11仿真下运行

The*_*der 5 .net c# spell-checking webbrowser-control internet-explorer-11

我试图在Winforms Web浏览器控件中进行拼写检查.

这是我目前的C#代码:

try
{
    String appname = Process.GetCurrentProcess().ProcessName + ".exe";
    RegistryKey key = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Internet Explorer\\Main\\FeatureControl\\FEATURE_BROWSER_EMULATION", RegistryKeyPermissionCheck.ReadWriteSubTree);

    object ieVal = key.GetValue(appname, null);
    MessageBox.Show(ieVal.ToString());

    if (ieVal == null || (int)ieVal != 11001)
    {
        key.SetValue(appname, 11001, RegistryValueKind.DWord);
    }

    key.Close();
}
catch
{
    MessageBox.Show("Registry stuff didn't work");
}

MessageBox.Show(webBrowser1.Version.ToString());

webBrowser1.DocumentText = "<html><head><body><div spellcheck=\"true\" style=\"width:100%; height:100%;\" contenteditable=\"true\"></div>"
            +"<script>alert(navigator.userAgent);</script>"
            +"</body></html>";
Run Code Online (Sandbox Code Playgroud)

所以首先我设置正确的注册表项,以便浏览器模拟IE11

然后我添加一个div标签,其中spellcheck属性设置为true.

MessageBox.Show(webBrowser1.Version.ToString())节目的版本是:

11.0.9600.18525
Run Code Online (Sandbox Code Playgroud)

navigator.userAgent表明,JavaScript显示为:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Run Code Online (Sandbox Code Playgroud)

因此,似乎Web浏览器控件正在使用IE11.但是当我键入拼写检查时不起作用.

注意:当我用真正的IE运行那个html代码时,一切正常.

此外,navigator.userAgent实际浏览器上显示的是:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
Run Code Online (Sandbox Code Playgroud)

注意2:当我在Windows 10机器上运行我的应用程序时,拼写检查有效.但我需要让它在Windows 7机器上运行.

小智 0

我在表单上使用 WebBrowser 控件时遇到了非常相似的问题,并找到了 2 个解决方案,每个解决方案都有不同的效果,都可以使用。

  1. spellcheck=true在 HTML 中使用:

    将该属性添加spellcheck=true到 HTML 或 BODY 或 TEXTAREA 标记(具体取决于您希望实现的位置)将允许对文本输入框进行拼写检查(我的测试是在 Windows 10 上进行的)。

    请注意,文本框中的任何现有文本都没有进行拼写检查 - 您必须输入新文本。当使用预先填充的文本框运行测试 EXE 时,这让我感到困惑,该文本框的拼写错误从未出现红色小下划线。

  2. FEATURE_SPELLCHECK 的注册表项

    这做了一些不同的事情。它允许 TinyMCE 中的拼写检查在我们的嵌入式 Web 浏览器控件中工作。它本身并没有在文本区域中启用拼写检查。

    请参阅下面的链接,了解与您所设置的注册表项接近的注册表项的引用。但是,它需要一个新密钥,然后需要一个与您正在运行的 EXE 名称匹配的值。就我而言,这涉及创建 FEATURE_SPELLCHECKING 注册表项,然后创建一个名为 TEST123.EXE 且值为 1 的 DWORD。

    https://msdn.microsoft.com/en-us/library/ee330735%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396#spellchecking

    我通过下面链接的页面发现了这一点,其中有人报告它不适用于 Windows 7。请注意,此人还使用“本地用户”密钥尝试了它,但根据我的经验,这不起作用:

    https://social.msdn.microsoft.com/Forums/ie/en-US/515fa4b1-2b85-46e4-a041-7dc27c4539c4/how-to-enable-spell-checker-in-web-browser-control-for- ie10?论坛=ieextensiondevelopment

  3. 使用以上两者。

    我们发现上面的方法 2 满足了我们的大部分需求,因为我们使用的是 TinyMCE。然而,在其他应用中,1 和 2 可以结合使用以提供最多的功能。