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


158

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 에게 감사드립니다 .

답변:


124

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를 사용하는 다른 주목할만한 응용 프로그램을 참조하십시오 .

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


쿠키 삭제, 캐시 .. 프록시 설정 등의 절반이 작동하지 않는다는 것을 잊어 버렸습니다. Awesomium을 사용하여 문제를 저장하십시오.

4
Hehe, 좋은 답변 Czarek, 신용 주셔서 감사합니다. :) (지금까지 보지 못했습니다)
Per Lundberg

4
물론, 주목할 가치가 있습니다. 오픈 소스 프로젝트에 "실종 된"것이있을 수 있습니다. Xilium.CefGlue와 CefSharp 모두 해당 규칙에 대한 예외는 아닙니다. 오픈 소스에 관한 좋은 점은 실제로 더 작은 문제를 조사하는 데 상당한 시간을 할애하고 수정 사항을 포함시킬 수 있다는 것입니다. 우리는 때때로 CefSharp를 사용하는 것을 보았습니다.
Per Lundberg

1
내가 틀렸지 만 CefSharp가 50MB가 넘는 DLL을 요구하지 않는 경우 수정하십시오. 결과적으로 거대한 설치 설정이 이루어집니다. libcef.dll이 주요 종속 항목으로 나열되어 있으며 38MB입니다.
Krafty

2
@Krafty 설치 설정을 사용하면 7z와 같은 알고리즘을 사용하여 압축 할 수 있으며 크기는 55MB에서 17MB로 줄었습니다. CefSharp 크기는 Chrome과 비교할 때 크기가 152MB이며 포장 크기는 40MB입니다.
Czarek Tomczak

11

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

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

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

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


2
실제로 CefSharp 인 "다른 쪽에서 온 것"입니다. CefSharp는 최신 VS 툴셋에서 3.5를 지원하는 데 문제가 있기 때문에 몇 개월 후에 만 ​​4.0입니다. (VS2010 +는 C ++ / CLI를 사용하여 이전 프레임 워크를 지원할 수 없습니다. .NET 4 또는 매우 오래된 Visual Studio 버전을 사용하도록 강요하기 때문에 약간 슬프습니다 ...)
Per Lundberg

8

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

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

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


지원도 환상적입니다.
huseyint

3
해당 웹 사이트에 기본 정보가없는 것 같습니다. 어떤 Chrome 버전이 포함되어 있습니까?
Czarek Tomczak

2
어, 자유롭지 않아 무료가 아닙니다. 이 사람들은 무엇을 생각하고 있었습니까? :)
dkellner

평가판이 있지만 무료는 아니라는 것을 여기에 명시해야합니다.
ewilan

8

내가 속한 팀이 개발 한 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");
        }
    }
}

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

여기에 이미지 설명을 입력하십시오

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

구성 요소는 자체 페이지 외에 Visual Studio Marketplace에서 NuGet 패키지VSIX 패키지 로 제공됩니다 .


1
유효하고 앱에 평가판을 포함 시켰습니다. 유일한 문제는 상용 제품이며 라이센스가 그리 저렴하지 않다는 것입니다. 그렇지 않으면 나에게 견고하게 보입니다.
DoronG

슬프게도 DotNetBrowser는 무료가 아닙니다! : /
Deniz

4

Awesomium.NET을 사용했습니다. 오픈 소스가 아니라는 점과 오래된 Webkit 렌더링 엔진을 사용한다는 사실은 마음에 들지 않지만 사용하기 쉽습니다. 그것은 내가 줄 수있는 유일한 보증에 관한 것입니다.


1
해당 프로젝트의 사용자 규모가 대략 얼마나되는지 공유 할 수 있습니까?
noseratio

나는 실제로 프로젝트를 배포하지 않았으므로 사용자 기반은 0이었습니다. 나는 옵션을 직접 실험하고있었습니다.
Ming Slogar

2
몇 달 동안 Awesomium 기반 C # 앱을 지원하는 데 어려움을 겪었습니다. C ++ 게임에서는 흔들릴 수 있지만 C #에서는 브라우저 제어가 완전히 버그가 있습니다. 복잡한 배포 (GAC에 물건을 추가하려면 이상한 설치 프로그램이 필요함), 버그가 많은 행동 (때로는 검은 화면으로 시작하고 사용자가 수동으로 앱을 다시 시작해야 함) 및 느린 속도 (웹 페이지가로드 될 때 표시되지 않음) , 페이지가 완전히 / 절반이로드 될 때까지 약간
멈추고 느린

5
나는 마침내 CefSharp와 함께 갔고 결과는 훌륭했습니다. <100ms 초기화 (즉, 즉시 초기화) 및 "버그"없음. 물건이 작동합니다. 그렇습니다. 또한 CefSharp를 GAC에 추가 할 필요가 없으므로 설치 관리자를 변경할 필요가 없습니다. 파일을 복사하고 이동하십시오. CEF / CefSharp가 테스트 한 모든 Mozilla / WebKit C # 라이브러리보다 우수하다고 언급 했습니까? 아 그리고 하늘을 위해 IE를 사용하지 마십시오. 효과가있다. 그렇습니다.하지만 완전히 기능이 부족하고 성능이 매우 나쁩니다 (속도).
플래시 The

1
@RobinRodricks 정확히 내 경험도. 나는 접근 방식을 거의 포기했지만 CefSharp를 발견했다.-) (그리고 프린터 드라이버가 DVD에 올 때 요즘 몇 MB를 더 걱정하는 사람은?
Xan-Kun Clark-Davis


2

WPF RSS 리더에서도 동일한 문제가 발생했습니다. 원래 Awesomium (버전 1.6이라고 생각합니다) Awesomium이 훌륭합니다. 캐싱 (이미지 및 HTML 컨텐츠), JavaScript 실행, 다운로드 차단 등을 제어 할 수 있습니다. 또한 매우 빠릅니다. 프로세스 격리는 브라우저 충돌시 앱이 충돌하지 않음을 의미합니다.

그러나 그것은 무겁고 릴리스 빌드조차도 약 10-15MB (정확한 숫자를 기억할 수 없음)를 추가하므로 약간의 시작 페널티가 있습니다. 그런 다음 IE 브라우저 제어에서 발생하는 유일한 문제는 JavaScript 오류를 반복해서 발생한다는 것입니다. 그러나 다음 스 니펫으로 수정되었습니다.

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

답변 해주셔서 감사합니다. 결국 Awesomium에서 IE로 돌아왔습니까?
noseratio

그래, 내가 했어. 그리고 나는 행복했다. ClickOnce를 사용하여 배포 가능 크기가 작고 시작이 멈추지 않았습니다!
Sameer Vartak

감사합니다. 귀하의 답변을 크게 투표했습니다. BTW, 내부 인터페이스 를 얻는 또 다른 방법IWebBrowser2있습니다.
noseratio

멋있는. ActiveX 컨트롤이 WPF에서 작동합니까? 투표 해 주셔서 감사합니다 :-)
Sameer Vartak

죄송합니다. 참조 링크를주의 깊게 읽으십시오. 예, XAML 샘플이며 작동합니다. 감사.
Sameer Vartak

1

Microsoft는 " Microsoft Edge WebView2 "WPF 컨트롤을 출시하여 Windows 10, Windows 8.1 또는 Windows 7에 Chromium을 포함시킬 수있는 훌륭한 무료 옵션을 제공합니다 Microsoft.Web.WebView2. 이 패키지는 Nuget을 통해 패키지로 제공 됩니다.


이 옵션은 2020이지만 요즘에는 크로스 플랫폼 솔루션 (예 : Chromely)을 찾고 있습니다.
noseratio

1
데스크톱 응용 프로그램이나 웹 응용 프로그램처럼 빌드 된 데스크톱 응용 프로그램에 작은 웹 항목을 추가하려는 경우에 달려 있다고 생각합니다. WebView2가 데스크탑 응용 프로그램에 대한 작은 웹 콘텐츠 인 경우에만 WebView2를 사용한다고 생각합니다.
scottheckel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.