【问题标题】:Add new Microsoft Edge to web browser control?将新的 Microsoft Edge 添加到 Web 浏览器控件?
【发布时间】:2021-04-14 05:58:31
【问题描述】:

带有 Microsoft Edge 的新 Windows 10 已经到来。我想问你,我怎样才能将它添加到我的网络浏览器控件中?我需要它,因为实际的 Web 浏览器控件不允许 JavaScript 和 CSS3。

我曾经也使用 WebKit 和 Awesomium 项目添加 Chrome 浏览器,但他们不记得登录凭据(我的应用程序需要它们)所以我必须使用 I.E.不幸的是。

【问题讨论】:

标签: c# webkit webbrowser-control windows-10 microsoft-edge


【解决方案1】:

2021 年 1 月更新:WebView2 已发布。这可以将基于 Chromium 的 Edge 集成为 Web 控件。不幸的是,它使用起来要复杂得多,但功能要强大得多。适用于 WinForms 或 WPF 或 C++ 应用程序。 https://docs.microsoft.com/en-us/microsoft-edge/webview2/

2018 年 5 月更新:微软终于让它变得简单了。 https://blogs.windows.com/msedgedev/2018/05/09/modern-webview-winforms-wpf-apps/

目前,新控件位于 Windows Community Toolkit 3.0 中并包含在 Toolkit.Win32.UI.Controls.dll 中,您可能需要手动添加对其的引用。

====== 我希望有人提到这一点,所以我会添加它,因为它看起来不会更新 webbrowser 控件。

改用 WebView 控件。这使用了 EdgeHTML 渲染引擎。这是 WindowPresentation 层的一部分但可以从 WinForms 和可能的其他应用程序链接。您必须转换为 UWP 应用程序

import Windows.UI.Xaml.Controls.WebView

示例代码:https://code.msdn.microsoft.com/windowsapps/XAML-WebView-control-sample-58ad63f7

我还没有用 WebView 替换我的 WebBrowser,但是界面看起来很熟悉。

【讨论】:

  • 好吧,我想这毕竟需要 UWP。我以为我读过一种在桌面应用程序中使用这些控件的方法,但显然这是一厢情愿的想法。
  • 我很久以前评论过,但我只是编辑过。可以使用一些 UWP API,但遗憾的是不能使用 WebView。您可以使用 Desktop Bridge 转换为 UWP 应用并使用 WebView 并仍然调用非 UWP 代码。
  • @GarrGodfrey 可能想再次查看此内容。 Edge正在被杀死。不知道对控制有什么影响。我仍在尝试获取有关此的更多信息。
  • 已再次更新 - 现在单独的 NuGet 包可用于 WinForms、WPF 和 UWP(Microsoft.Toolkit.Forms.UI.Controls.WebView、Microsoft.Toolkit.Wpf.UI.Controls.WebView、 Microsoft.Toolkit.Uwp.UI.Controls.WebView)
  • @DanielP 关于 WebView2 的一切都更加困难。我不确定您是否可以完全禁用打印。它在单独的进程中运行 chromium,最初不可能拦截 Ctrl-P,但我认为现在可以。
【解决方案2】:

不幸的是,目前似乎没有办法在不使用第三方插件的情况下在 MS 网络浏览器控件中使用 Edge。虽然将 dword:00002ee1 添加到 FEATURE_BROWSER_EMULATION 的建议“解决方案”会导致 Web 浏览器(错误地)将 Edge/12.9200_AGENT 报告为 USER_AGENT,但实际上它仍然使用 Trident 引擎来呈现 Web 内容。所以看来微软本来打算在webbrowser control中支持Edge,但是没有完成,忘记拿出对应的Emulation key。您可以通过浏览http://html5test.com/ 来验证这一点,其中 webbrowser control 得分在 342 到 347 分之间(与 IE11 相同),而 Edge 得分为 397 分。

【讨论】:

【解决方案3】:

更新 正如@MartinKasztantowicz 的回答中所述,截至目前(2016 年 2 月中旬),尚无加载 real Edge 渲染引擎的已知方法。 下面将控件设置为报告新的用户代理,但使用旧引擎进行渲染。尽管如此,它还是有用的,例如说服网站关闭已弃用的 IE hack。

System.Windows.Forms.WebBrowser 的浏览器版本由一个注册表项控制每个应用程序。如果您的用户使用的是 Windows 10,您可以通过添加以下键来告诉控件 load fake Edge:

  • 对于 64 位应用程序,仅限 32 位 Windows 或当前用户:[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] "Example.exe"=dword:00002ee1 分别为 [HKEY_CURRENT_USER\...]
  • 对于 64 位机器上的 32 位应用程序(仅限机器范围):[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] "Example.exe"=dword:00002ee1

更多信息和数值,查看对应的Microsoft Documentation

我刚刚测试,得到如下结果……不知道有没有值也可以报Windows 10:

【讨论】:

  • HKCU\Software 未重定向
  • @CaringDev 我不认为该站点尚未识别 Win10,因为此问题仍然存在,并且实际使用 Edge 时不会出现此问题。我已经读到这是 webBrowser 控件的默认注册表错误,对于我来说,我不记得在哪里
  • @CodyFidler 是的,正如更新中所述,这是一个众所周知的问题。我现在删除了关于该网站的括号内的句子。
  • 这只是让服务器认为这是Edge,但它仍然不支持Edge中支持的HTML5元素,它只是旧的ie,但伪装成Edge..
  • @VibeeshanRC 是的,我就是这么说的。
【解决方案4】:

大家都忘记了 Windows API 库吗?要嵌入任何窗口,您只需要 MoveWindowSetParent 的组合。要隐藏标题栏,您可以使用SetWindowLong,如果您需要隐藏窗口周围的其他部分(例如地址栏),您可以轻松使用HwndHost

嵌入记事本的C++示例:

HWND Window = FindWindow("Notepad", "Untitled - Notepad");
if (Window != nullptr)
{
    SetParent(Window, hwnd);
    SetWindowPos(Window, nullptr, 0, 0, 0, 0, SWP_NOSIZE);
    RedrawWindow(Window, nullptr, nullptr, RDW_INVALIDATE);
    ShowWindow(Window, SW_SHOW);
}

不要误会我的意思,它很老套,但确实有效。

反正微软发了such a feature now

【讨论】:

    【解决方案5】:

    说这是不可能的旧答案现在已经过时了。

    Microsoft 最近发布了他们的基于 Microsoft Edge 的网络浏览器控件版本。他们称它为“Webview”,它适用于 WPF 和 Winforms。这是他们的官方announcement,其中包含 2018 年 4 月 Windows 博客中的一些入门信息。

    还有API documentation

    【讨论】:

      【解决方案6】:

      对于完整的 Edge Chromium 支持,截至本说明,WebView2 控件似乎是 Microsoft 的最新产品。
      https://docs.microsoft.com/en-us/microsoft-edge/webview2/

      【讨论】:

        【解决方案7】:

        使用使用嵌入式 WebKit 引擎的 JavaFX。或者如果你被困在 .NET 中,那么 https://www.teamdev.com/dotnetbrowser

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多