IT박스

WPF / C #을 사용하여 IE WebBrowser 컨트롤 대신 Chromium을 포함하는 옵션

itboxs 2020. 6. 8. 21:18
반응형

WPF / C #을 사용하여 IE WebBrowser 컨트롤 대신 Chromium을 포함하는 옵션


Internet Explorer 기반 WPF WebBrowser 컨트롤에는 일부 키보드 및 포커스 문제메모리 누수 문제가 있습니다 . 이러한 문제에 대한 대안으로 HTML 편집을 기반으로하는 WPF / C # 프로젝트에서 WebBrowser 컨트롤 대신 Chromium을 호스팅 할 수있는 옵션을 고려하고 있습니다. 비슷한 질문 한 질문 이전에 여기에. 답변을 읽고 자체 연구를 수행 했지만 실제로 프로덕션 품질 프로젝트에서 다음 옵션 중 하나를 사용한 사람들로부터 더 많은 피드백을 얻고 싶습니다 .

AwesomiumAwesomium.NET

매우 적합 해 보이지만 프로젝트가 오픈 소스가 아니며 전체 소스를 쉽게 사용할 수 없다는 사실이 마음에 들지 않습니다. 또한 오프 스크린 렌더링은 우리가 실제로 의존하는 것이 아니기 때문에 프로젝트에 과도한 영향을 줄 수 있습니다.

CEF에 대한 CEF (Chromium Embedded Framework).NET 바인딩

아마도 현재 사용 가능한 최상의 옵션 일 것입니다. 이 프로젝트는 현재 Chrome v27과 동기화되어 살아 있고 활발한 것으로 보입니다. CEF3은 Chrome 다중 프로세스 아키텍처를 사용합니다. 또한 어도비가이를 지지 하는 것처럼 보인다 .

구글의 크롬 프레임

원래 목적은 IE 및 Firefox 용 HTML5 플러그인 이었지만 실제로는 독립 실행 형 ActiveX 컨트롤로도 작동하므로 WPF와 함께 사용하기 위해 랩핑 할 수 있습니다. 내부 웹 페이지 ( ) 와 상호 작용 하기에 충분한 API제공합니다 onmessage, addEventListener/removeEventListener, postMessage. Google이 Chrome 프레임 중단 한다는 것을 알고 있지만 소스가 Chromium 저장소에 남아 있다고 가정합니다. 최신 Chromium 코드로 업데이트하는 것은 어렵지 않으며이를 완벽하게 제어 할 수 있습니다.

WebKit .NET 랩퍼

크롬 기반이 아니며 V8 엔진을 사용하지 않으므로 실제로는 옵션이 아닙니다.

간과 한 다른 옵션이 있습니까?

실제 프로덕션 품질의 WPF 프로젝트를 위해 위의 옵션 중 하나를 사용하여 경험을 공유 한 사람이라면 대단히 감사하겠습니다. 통합, 라이센스 또는 배포 관련 사항이 있습니까? 감사합니다.

[편집 됨] 또한 관대 한 현상금 제안을 제공 하여이 질문에 도움 을 주신 artlung 에게 감사드립니다 .


이미 Chromium (CEF, Chrome Frame, Awesomium)을 포함하는 데있어 가장 주목할만한 솔루션을 나열했습니다. 더 이상 중요한 프로젝트가 없습니다.

거기에 여전히 버클륨의 프로젝트는 (참조 버클륨 샤프버클륨은 관리 ),하지만 크롬의 이전 버전을 emebeds.

CEF 는 최선의 선택입니다. 완전히 공개 된 소스이며 자주 업데이트됩니다. 최신 버전의 Chromium을 포함 할 수있는 유일한 옵션입니다. Per Lundberg가 CEF 3을 CefSharp로 포팅하는 작업을 활발히 진행하고 있으므로 미래에 가장 적합한 옵션입니다. Xilium.CefGlue있지만 CEF에 대한 저수준 API를 제공하며 CEF의 C API에 바인딩됩니다. 반면에 CefSharp는 CEF의 C ++ API에 바인딩됩니다.

Adobe는 CEF를 사용하는 유일한 주요 업체는 아닙니다 . CEF Wikipedia 페이지 에서 CEF를 사용하는 다른 주목할만한 응용 프로그램을 참조하십시오 .

업데이트 크롬 프레임은 프로젝트가 되었기 때문에 무의미 은퇴 .


우리는 얼마 전에 똑같은 도전을했습니다. 우리는 WPF 기반이며 .NET 3.5를 지원하는 CEF3 오픈 소스 라이브러리와 함께 가고 싶었습니다.

첫째, CEF의 저자는 여기 에 다른 언어에 대한 바인딩을 나열했습니다 .

둘째, 우리는 오픈 소스 .NET CEF3가 호출되는 바인딩 나서서 Xilium.CefGlue 과 함께 좋은 성공을 거두었 다. 예상대로 무언가 작동하지 않는 경우, 제작자는 일반적으로 내장 비트 버킷 추적기 에서 열린 문제에 매우 민감하게 반응합니다

지금까지 우리를 잘 섬겼습니다. Author는 최신 CEF3 릴리스 및 정기적 인 버그 수정을 지원하도록 라이브러리를 업데이트합니다.


다른 하나는 다음과 같습니다.

http://www.essentialobjects.com/Products/WebBrowser/Default.aspx

이 엔진은 최신 Chrome 엔진을 기반으로하지만 CEF보다 사용하기가 훨씬 쉽습니다. 간단하게 참조하고 사용할 수있는 단일 .NET dll입니다.


내가 속한 팀이 개발 한 DotNetBrowser 라이브러리를 살펴보십시오 . Chromium 기반 WPF 및 WinForms 브라우저 컨트롤을 제공하며 .NET 응용 프로그램에 포함하기가 매우 쉽습니다. HTML5, CSS3 및 JavaScript를 포함한 모든 최신 웹 표준을 지원합니다. 렌더링 된 페이지는 Chrome에서와 똑같이 보입니다.

라이브러리는 Chromium의 다중 프로세스 아키텍처를 상속합니다. 각 웹 페이지는 별도의 Chromium 프로세스로 렌더링되며 플러그인 충돌 또는 웹 페이지에서 기타 예기치 않은 오류가 발생한 후에도 응용 프로그램이 계속 작동합니다.

DotNetBrowser에서 제공하는 다른 유용한 기능은 다음과 같습니다. 이벤트로드, 네트워크 활동 처리, 프록시 구성, 사용자 동작 시뮬레이션, 쿠키 작업, 쿠키 작업, DOM 액세스 및 수정, DOM 이벤트 듣기, .NET에서 JavaScript 호출이 가능합니다. 그 반대의 경우, 웹 페이지에서 웹 카메라 및 마이크를 사용하고 WebRTC 기반 통신을 설정하는 등의 작업을 수행하십시오 .

자세한 내용 API Reference 를 확인하십시오.

아래 코드 스 니펫은 BrowserView를 작성하여 양식에 포함시키고 URL을로드하는 방법을 보여줍니다.

using System.Windows.Forms;
using DotNetBrowser;
using DotNetBrowser.WinForms;

namespace WinForms.DotNetBrowser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            BrowserView browserView = new WinFormsBrowserView();
            Controls.Add((Control) browserView);
            browserView.Browser.LoadURL("http://www.youtube.com");
        }
    }
}

위의 예제를 실행하면 다음과 같은 결과가 나타납니다.

enter image description here

도서관은 상업용입니다. 상업용 라이센스에는 다양한 팀 규모에 대한 지원 패키지가 포함됩니다. 라이브러리의 소스 코드를 구입할 수도 있습니다.

Besides its own page the component is available as NuGet package and as VSIX package in the Visual Studio Marketplace.


I have used Awesomium.NET. Although I don't like the fact that it's not open-source, and also the fact that it uses a pretty old Webkit rendering engine, it is really easy to use. That's about the only endorsement I can give it.


UPDATE 2018 MAY:

Alternatively, you can embed Edge browser, but only targetting windows 10.

Here is the solution.


I had same issue with my WPF RSS reader, I originally went with Awesomium (I think version 1.6) Awesomium is great. You get a lot of control for caching (images and HTML content), JavaScript execution, intercepting downloads and so forth. It's also super fast. The process isolation means when browser crashes it does not crash the app.

But it's also heavy, even release build adds about 10-15mb (can't remember exact number) and hence a slight start-up penalty. I then realized, only problem I had with IE browser control was that it would throw the JavaScript errors every now and again. But that was fixed with the following snippet.

I hardly used my app on XP or Vista but on Win 7 and above it never crashed (at least not because I used IE browser control)

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 });
    }
}

참고URL : https://stackoverflow.com/questions/18119125/options-for-embedding-chromium-instead-of-ie-webbrowser-control-with-wpf-c

반응형