WPF/C#로 IE WebBrowser 컨트롤 대신 Cromium을 포함하는 옵션
2020년에 업데이트된 이 기사에서는 기본 Windows Desktop 애플리케이션에서 HTML WebView를 호스팅하는 방법에 대한 다양한 접근 방식의 메모리 설치 공간을 비교했습니다.
- MSEdge WebView2 WPF
- 크롬리/CefSharp
- 전자 v10
- 기존 IE11 웹 브라우저 WPF.
Internet Explorer 기반 WPF WebBrowser 컨트롤은 일부 키보드 및 포커스 문제와 메모리 누수 문제로 인해 문제가 발생합니다.이러한 문제에 대한 대안으로 HTML 편집을 기반으로 한 WPF/C# 프로젝트에서 웹 브라우저 제어 대신 Cromium을 호스팅하는 사용 가능한 옵션을 고려하고 있습니다.이전에도 여기에 비슷한 질문이 있었습니다.저는 답변을 읽고 자체 조사를 했지만, 생산 품질 프로젝트에서 다음 옵션 중 하나를 실제로 사용한 사람들로부터 더 많은 피드백을 받기를 바랍니다.
매우 적절해 보이지만, 프로젝트가 오픈 소스가 아니며 전체 소스를 쉽게 사용할 수 없다는 사실이 마음에 들지 않습니다.또한, 오프스크린 렌더링은 우리가 실제로 의존하는 것이 아니기 때문에 프로젝트에 너무 많은 도움이 될 수 있습니다.
이것이 현재 사용 가능한 최선의 옵션일 것입니다.이 프로젝트는 현재 Chrome v27과 동기화되어 활성화된 것으로 보입니다. CEF3는 Chrome 다중 프로세스 아키텍처를 사용합니다.또한 Adobe가 그것을 지지하는 것처럼 보입니다.
원래 목적은 IE 및 Firefox용 HTML5 플러그인이었지만 실제로는 독립형 ActiveX 컨트롤로도 작동하므로 WPF와 함께 사용할 수 있도록 포장할 수 있습니다.내부 웹 페이지와의 상호 작용을 위한 충분한 API를 노출합니다.onmessage, addEventListener/removeEventListener, postMessage
) Google에서 Chrome Frame을 중단할 것으로 알고 있지만 소스는 Chrome 저장소에 남아 있을 것으로 생각합니다.우리가 진행하는 동안 최신 크롬 코드로 업데이트하는 것은 어렵지 않을 것이고, 우리는 이것을 완전히 통제할 수 있을 것입니다.
정확히 크롬 기반은 아니며 V8 엔진을 사용하지 않기 때문에 실제로는 옵션이 아닙니다.
제가 간과했을 수도 있는 다른 방법이 있나요?
누군가가 실제 생산 수준의 WPF 프로젝트를 위해 위의 옵션 중 하나를 사용하여 경험을 공유해 주시면 감사하겠습니다.통합, 라이센싱 또는 구현 관련 사항이 있었습니까?
크롬 임베디드를 위한 가장 주목할 만한 솔루션(CEF, 크롬 프레임, 아워소미움)을 이미 열거하셨습니다.더 이상 중요한 프로젝트는 없습니다.
여전히 베르켈륨 프로젝트(베르켈륨 샤프 및 베르켈륨 관리 참조)가 있지만 오래된 버전의 크롬을 내장하고 있습니다.
CEF는 완전히 오픈 소스이며 자주 업데이트됩니다.크롬의 최신 버전을 내장할 수 있는 유일한 옵션입니다.Per Lundberg는 CEF 3를 CefSharp로 포팅하는 작업에 적극적으로 참여하고 있으므로, 이것이 미래를 위한 최선의 옵션입니다.자일리움도 있습니다.CefGlue, 그러나 이 API는 CEF에 대한 낮은 수준의 API를 제공하며 CEF의 C API에 바인딩됩니다.반면 CefSharp는 CEF의 C++ API에 바인딩됩니다.
Adobe는 CEF를 사용하는 유일한 주요 업체가 아닙니다. CEF 위키백과 페이지에서 CEF를 사용하는 다른 주목할 만한 응용 프로그램을 참조하십시오.
프로젝트가 폐기되었기 때문에 Chrome Frame을 업데이트하는 것은 무의미합니다.
우리는 얼마 전에도 똑같은 도전을 했습니다.WPF 기반이며 .NET 3.5를 지원하는 CEF3 오픈 소스 라이브러리를 사용하고자 했습니다.
먼저, CEF의 저자가 직접 여기에 다양한 언어에 대한 바인딩을 나열했습니다.
두 번째로, 우리는 Xilium이라는 오픈 소스 .NET CEF3 바인딩을 진행했습니다.CefGlue는 그것으로 좋은 성공을 거두었습니다.무언가가 예상대로 작동하지 않는 경우, 작성자는 대개 내장 비트 버킷 추적기에 열려 있는 문제에 매우 반응합니다.
지금까지 그것은 우리에게 도움이 되었습니다.작성자는 최신 CEF3 릴리스 및 버그 수정을 정기적으로 지원하도록 라이브러리를 업데이트합니다.
다음은 또 다른 예입니다.
http://www.essentialobjects.com/Products/WebBrowser/Default.aspx
이것도 최신 크롬 엔진을 기반으로 하지만 CEF보다 훨씬 사용하기 쉽습니다.참조하여 사용할 수 있는 단일 .NET dll입니다.
저는 Awesomium을 사용했습니다.NET. 비록 오픈 소스가 아니라는 사실과 꽤 오래된 웹킷 렌더링 엔진을 사용한다는 사실이 마음에 들지 않지만, 정말 사용하기 쉽습니다.그것이 제가 그것을 지지할 수 있는 유일한 이유입니다.
2018년 5월 업데이트:
또는 Edge 브라우저를 포함할 수 있지만 대상 창 10만 포함할 수 있습니다.
WPF RSS 리더에도 같은 문제가 있었습니다. 원래 Awesomium(버전 1.6)과 함께 사용했습니다. Awesomium은 훌륭합니다.캐시(이미지 및 HTML 컨텐츠), JavaScript 실행, 다운로드 가로채기 등에 대한 많은 제어 권한을 얻을 수 있습니다.또한 매우 빠릅니다.프로세스 분리는 브라우저가 충돌할 때 앱이 충돌하지 않는다는 것을 의미합니다.
그러나 무겁고, 릴리스 빌드에도 약 10-15MB(정확한 숫자를 기억할 수 없음)가 추가되어 약간의 시작 페널티가 부과됩니다.그리고 나서 깨달은 것은, IE 브라우저 제어의 유일한 문제는 자바스크립트 오류가 가끔 발생한다는 것이었습니다.하지만 그것은 다음과 같은 단편으로 수정되었습니다.
XP나 Vista에서는 앱을 거의 사용하지 않았지만 Win 7 이상에서는 앱이 다운되지 않았습니다(적어도 IE 브라우저 제어를 사용했기 때문은 아닙니다)
IOleServiceProvider sp = browser.Document as IOleServiceProvider;
if (sp != null)
{
IID_IWebBrowserApp = new Guid("0002DF05-0000-0000-C000-000000000046");
Guid IID_IWebBrowser2 = new Guid("D30C1661-CDAF-11d0-8A3E-00C04FC9E26E");
webBrowser;
sp.QueryService(ref IID_IWebBrowserApp, ref IID_IWebBrowser2, out webBrowser);
if (webBrowser != null)
{
webBrowser.GetType().InvokeMember("Silent",
BindingFlags.Instance | BindingFlags.Public | BindingFlags.PutDispProperty, null, webBrowser, new object[] { silent });
}
}
Microsoft는 "Microsoft Edge WebView2" WPF 컨트롤을 출시하여 Windows 10, Windows 8.1 또는 Windows 7에 Cromium을 무료로 포함할 수 있는 우수한 옵션을 제공합니다.그것은 패키지로 Nuget을 통해 이용할 수 있습니다.
상용 솔루션을 고려하고 있다면 DotNetBrowser도 살펴볼 수 있습니다.
DOM 지원, JavaScript 실행, JavaScript에서 .NET 객체 호출, 네트워크 및 쿠키 처리, 코드에서 웹 페이지 인쇄와 같은 다양한 기능을 제공합니다.최신 Cromium 엔진을 기반으로 하며 .NET Framework 4.5부터 .NET 6까지 다양한 .NET 구현을 지원합니다.WPF 및 윈도우즈 양식이 모두 지원됩니다.
다양한 시나리오에서 사용할 수 있는 방법을 보여주는 예제가 포함된 저장소가 있습니다. https://github.com/TeamDev-IP/DotNetBrowser-Examples
NuGet: https://www.nuget.org/packages/DotNetBrowser/ 에서도 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/18119125/options-for-embedding-chromium-instead-of-ie-webbrowser-control-with-wpf-c
'sourcecode' 카테고리의 다른 글
ASP.NET 웹 페이지를 로드할 때 Underscore.js에 대한 Javascript ".map" 파일이 누락됨 (0) | 2023.05.18 |
---|---|
이클립스의 즉시 창 (0) | 2023.05.18 |
Node.js에서 RESTful API를 가장 잘 만드는 방법 (0) | 2023.05.18 |
@Html을 호출합니다.부분: 다른 컨트롤러에 속하는 부분 뷰를 표시합니다. (0) | 2023.05.18 |
Windows 명령 프롬프트에서 ls를 생성하는 방법은 무엇입니까? (0) | 2023.05.18 |