带有 Microsoft Edge 的新 Windows 10 已经到来。我想问你,我怎样才能将它添加到我的网络浏览器控件中?我需要它,因为实际的 Web 浏览器控件不允许 JavaScript 和 CSS3。
我曾经也使用项目 WebKit 和 Awesomium 添加 Chrome 浏览器,但他们不记得登录凭据(我的应用程序需要它们)所以很遗憾我不得不使用 IE。
带有 Microsoft Edge 的新 Windows 10 已经到来。我想问你,我怎样才能将它添加到我的网络浏览器控件中?我需要它,因为实际的 Web 浏览器控件不允许 JavaScript 和 CSS3。
我曾经也使用项目 WebKit 和 Awesomium 添加 Chrome 浏览器,但他们不记得登录凭据(我的应用程序需要它们)所以很遗憾我不得不使用 IE。
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,但是界面看起来很熟悉。
不幸的是,目前似乎没有办法在不使用第三方插件的情况下在 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 控制得分在 342 到 347 分之间(与 IE11 相同),而 Edge 得分 397 分。
更新正如@MartinKasztantowicz 的回答中所述,截至目前(2016 年 2 月中旬),没有已知的方法可以加载真正的Edge 渲染引擎。下面将控件设置为报告新的用户代理,但使用旧引擎进行渲染。尽管如此,它还是很有用的,例如说服网站关闭已弃用的 IE hack。
每个应用程序的浏览器版本由注册表项System.Windows.Forms.WebBrowser
控制。如果您的用户使用的是 Windows 10,您可以通过添加以下键来告诉控件加载假Edge:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"Example.exe"=dword:00002ee1
分别[HKEY_CURRENT_USER\...]
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]
"Example.exe"=dword:00002ee1
有关更多信息和值,请查看相应的Microsoft 文档
我刚刚测试,得到了以下结果……不知道是否有任何值也可以报告Windows 10:
每个人都忘记了 Windows API 库吗?要嵌入任何窗口,您只需要MoveWindow和SetParent的组合。要隐藏标题栏,您可以使用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);
}
不要误会我的意思,它很hacky,但它确实有效。
反正微软现在做了这样的功能
对于完整的 Edge Chromium 支持,截至本文为止,WebView2 控件似乎是 Microsoft 的最新产品。
https://docs.microsoft.com/en-us/microsoft-edge/webview2/
使用使用嵌入式 WebKit 引擎的 JavaFX。或者如果你被困在 .NET 中,那么https://www.teamdev.com/dotnetbrowser