Chrome과 같은 더 나은 브라우저로 .NET WebBrowser 컨트롤을 대체 하시겠습니까?


432

최신 브라우저를 .NET 응용 프로그램에 삽입하는 비교적 쉬운 방법이 있습니까?

지금까지 내가 이해하는 한, WebBrowser컨트롤에 대한 래퍼입니다 IE 는 매우 이전 버전처럼 보이는 것을 제외하고는 문제가되지 않을 것이다, IE 모두와 함께, CSS 나사 업, 잠재적 인 보안 위험의 측면에서 수반 (렌더링 엔진이 패치되지 않은 경우, 실제 버퍼 오버 플로우 문제가 해결 될 것으로 기대할 수 있습니까?) 및 기타 문제.

내가 사용하고 비주얼 스튜디오 C #을 (익스프레스 에디션 - 그것은 여기에 어떤 차이가 있습니까?)

좋은 웹 브라우저를 내 응용 프로그램에 통합하고 싶습니다. 일부에서는 사용자 등록 프로세스를 처리하고 웹 사이트의 일부 기능과 다른 순서와의 인터페이스를 처리하는 데 사용하지만 더 많은 오류가 필요한 제어를 필요로하는 다른 응용 프로그램이 있습니다.

나는 필요하다:

  • 내 응용 프로그램의 창 안에 통합 할 수있는 브라우저 (별도의 창이 아님)
  • 최신 브라우저와 동등한 CSS, js 및 기타 웹 기술 지원
  • "탐색", "뒤로", "다시로드"와 같은 기본 브라우저 기능 ...
  • 페이지 코드 및 출력에 대한 자유 액세스.

Chrome은 BSD 라이센스하에 있기 때문에 Chrome에 대해 생각했지만 최신 버전의 IE에 만족할 것입니다.

가능한 한 간단하게 유지하고 싶습니다. 기존 WebBrowser컨트롤을 패치 할 수 있다면 가장 좋을 것입니다.이 컨트롤은 이미 필요한 것의 약 70 %를 수행하지만 가능하지 않다고 생각합니다.

Mozilla에 대한 activeX 컨트롤 ( http://www.iol.ie/~locka/mozilla/control.htm ) 을 찾았 지만 이전 버전 인 것 같으므로 반드시 개선 된 것은 아닙니다.

나는 제안에 개방적이다


19
왜 WebBrowser 컨트롤이 이전 버전의 IE를 사용한다고 말합니까? IE8 WebBrowser는 기본적으로 IE7 렌더링으로 표시되지만 사용자 시스템에 설치된 버전을 사용합니다.
blog Robinson

17
내 컴퓨터에서는 그런 식으로 보이지 않기 때문입니다. IE8이 설치되어 있지만 컨트롤에는 IE 5 이후로는 볼 수 없었던 디스플레이 문제가 표시됩니다. 매우 간단한 로그인 양식, CSS를 터치하는 2 개의 필드에 디스플레이가 깨져서 일부 자바 스크립트 디스플레이가 작동하지 않지만 IE8, Firefox, Chrome, Opera에서는 괜찮습니다. 그래서 렌더링 엔진은 오래된 것으로 가정했습니다. 나는 그것에 대해 완전히 틀릴 수 있으며 아마도 문제는 실제로 내가 생각한 것과 다릅니다.
Sylverdrag

3
@ 실버 드래그 : 당신은 틀 렸습니다. 시스템의 최신 IE를 사용합니다. 그러나 WebBrowser 컨트롤이 독립 실행 형 브라우저보다 이전 버전과의 호환성 문제가 더 강하다는 것을 읽었습니다. 예를 들어, IE8은 클릭하여 IE7 모드를 켤 수있는 아이콘을 가질 수 있습니다. 프로그램의 일부로이 기능을 사용할 수 없으므로 호환성을 위해 컨트롤은 기본적으로 이전 모드로 설정됩니다. OTOH, "IE8 모드"를 사용하도록 설정하는 방법을 읽지 못했습니다.
John Saunders

55
사실, 존 샌더스, 당신은 틀 렸습니다. ie4를 사용하며 현재 값을 사용하도록 레지스트리 값을 변경해야합니다. "기능 모드 에뮬레이션"을 조회하면 최근에 변경된 키워드 답변을 얻을 수 있지만 키워드 네이티브를 포함하는 데 사용되지만 Google은 "webbrowser control"에서 언급 한 키워드를 Google에 표시하면 MSDN 기사를 찾을 수 있습니다.
Erx_VB.NExT.Coder

8
기본적으로 호스팅 된 WebBrowser컨트롤은와 별도로 지시하지 않는 한 IE7 에뮬레이션을 사용합니다 FEATURE_BROWSER_EMULATION. 이것은 여기에 문서화되어 있습니다 : blogs.msdn.com/b/askie/archive/2009/03/23/…
noseratio

답변:


171

Checkout CefSharp .Net 바인딩, 커뮤니티에서 고맙게 받아 들인 멋진 프로젝트로 돌아 오기 시작한 프로젝트.

이 프로젝트는 Chromium Embedded Framework를 감싸고 있으며 Rdio의 Windows 클라이언트, Windows 용 Facebook Messenger 및 Windows 용 Github를 비롯한 여러 주요 프로젝트에서 사용되었습니다.

WPFWinforms에 대한 브라우저 제어 기능을 갖추고 있으며 수많은 기능과 확장 점이 있습니다. Chromium을 기반으로하므로 엄청나게 빠릅니다.

NuGet에서 가져 오십시오. Install-Package CefSharp.Wpf또는Install-Package CefSharp.WinForms

예를 확인하고 의견 / 피드백 / 풀 요청을 제공하십시오 : https://github.com/cefsharp/CefSharp

BSD 라이센스


2
저는 OWS에서 CEfSharp로 전환했으며, 매우 양질의 활동적인 커뮤니티라고 단언 할 수 있습니다. 그것을 사랑하십시오. github.com/cefsharp/CefSharp
Vin

1
CefSharp는 훌륭하지만 라이브러리가 너무 커서 실패 했으므로 (마지막으로 20MB 이상) 더 가벼운 프로젝트에는 적합하지 않을 수 있습니다.
Skyl3lazer

1
@ANguyen 그렇습니다 당신은
chillitom

1
이 프로젝트를 시작한 사람은 당신이라는 것을 매우 기쁘게 생각합니다! 최근에 cefsharp를 사용했지만 라이브러리 크기가 80MB 이상으로 크지 만 응용 프로그램의 적절한 기능 (특히 부드러운 렌더링)에 필요하다는 것을 알 수 있습니다. 이것을 줄일 방법이 있습니까?
Aditya Bokade

5
이것은 내 프로젝트를 망쳤다. winforms nuget 패키지를 설치 한 후 모든 참조가 손상되었습니다.
toddmo

84

모르는 경우 Chrome에서 웹킷을 사용하며 Safari에서도 사용됩니다. 같은 맥락의 몇 가지 질문이 있습니다.

웹 키트 하나는 다른 답변 상태가 좋지 않으므로 한 버전은 더 이상 작동하지 않으며 (Google 코드 1) 모노 버전은 실험적입니다. 누군가가 괜찮은 .NET 래퍼를 만들려고 노력했다면 누군가가하고 싶지 않은 것 같습니다. 이제 HTML5 및 IE (8 ) 엔진이 부족합니다.

업데이트 (2014)

Awesomium 이라는 .NET 애플리케이션에 Chrome을 포함 할 수있는 새로운 이중 라이센스 프로젝트가 있습니다 . .NET API와 함께 제공되지만 렌더링에는 꽤 많은 해킹이 필요합니다 (이 예제에서는 브라우저 창을 버퍼로 가져와 버퍼를 이미지로 페인트하고 타이머에서 새로 고침).

나는 이것이 Battlefield 3에서 Origin이 사용하는 브라우저 라고 생각 합니다.

업데이트 (2016)

지금이 DotnetBrowser , Awesomium에 상업 대안은. Chromium을 기반으로합니다.


감사. Gecko 래퍼를 살펴 보겠습니다. 한 가지, 원래 답변은 "모질라 ActiveX 컨트롤을 등록하기 만하면됩니다"라고 표시되어 있으며 Express 에디션에서 추가 컨트롤을 등록 할 수 없다고 생각했습니다. 나는 분명한 것을 놓치고 있습니까?
Sylverdrag

4
@Syl the Express Edition은 필요한만큼 많은 컨트롤을 등록 할 수 있습니다. 그들이하지 않는 것은 Visual Studio에 플러그인을 설치할 수있게하는 것입니다.
Joel Coehoorn

1
나는 C #과 웹킷을 사용하는 아주 나쁜 경험이 있고 마지막으로 나는 .NET과 함께 제공되는 기본 웹 브라우저 구성 요소에 정착했다
서밋 고쉬

1
이 날짜 기준으로 위의 프로젝트는 실행 가능한 드롭 인 대체품이 아닙니다. 컴파일러 오류가 많고 불안정합니다. Awesomium은 완전하고 완전한 쓰레기입니다.
Kraang Prime

"이것은 Battlefield 3에서 Origin이 사용하는 브라우저라고 생각합니다." 이것은 올바르지 않습니다. 나는이 응용 프로그램을 Windows 10에서 강제로 사용해야했기 때문에 이것을 알고 있습니다. 이것은 얼마 전, 아마도 해결 된 문제였습니다.
Theyouthis

64

나는 며칠 동안 C # 웹 브라우저 구성 요소에 대한 대안을 테스트 해 왔으며 여기 내 목록이 있습니다.

1. 최신 IE 버전 8,9 사용 :

웹 브라우저 구성 요소가 IE7이 아닌 IE8입니까? 이것을 바꾸는 방법?

장점 :

  • 실행하는 데 많은 작업이 필요하지 않습니다
  • IE9 인 경우 일부 HTML5 / CSS3 지원, IE10 인 경우 전체

단점 :

  • 대상 컴퓨터에 대상 IE 버전이 설치되어 있어야합니다. IE10은 여전히 ​​Win7에서 미리보기 상태입니다

IE9에는 최고의 CSS3 및 HTML5 기능이 없지만 많은 작업이 필요하지 않으며 일부 HTML5 및 CSS3 지원을 얻을 수 있습니다. 그러나 IE10을 동일한 방식으로 실행할 수 있다고 확신합니다. 문제는 대상 시스템에 IE10이 설치되어 있어야하며 Windows 7에서 여전히 미리보기이므로 권장하지 않습니다.

2. OpenWebKitSharp

OpenWebKitSharp는 WebKit.NET 0.5 프로젝트를 기반으로하는 웹킷 엔진을위한 .net 래퍼입니다. WebKit은 Chrome / Safari에서 사용하는 레이아웃 엔진입니다.

장점 :

  • 적극적으로 개발
  • HTML5 / CSS3 지원

단점 :

  • 구현되지 않은 많은 기능
  • x64를 지원하지 않습니다 (x86 용으로 앱을 빌드해야 함)

많은 기능이 아직 구현되지 않았지만 OpenWebKit은 꽤 훌륭합니다 .Visual Studio에서이를 사용하여 null 개체 참조를 throw 한 다음 디자인 모드에서 몇 가지 문제가 발생했습니다. 그것을 사용하는 사람은 거의 즉시 js 경고가 아무것도하지 않는 것을 알 수 있습니다. mouseup, mousedown ... 등의 이벤트가 작동하지 않고 js 드래그 앤 드롭이 버그가 있습니다.

또한 특정 버전의 VC 재배포 가능 패키지가 필요하기 때문에 설치에 어려움이 있었으므로 예외 후에 이벤트 로그를보고 VC 버전을 찾아 설치했습니다.

3. GeckoFX

장점 :

  • 모노에서 작동
  • 적극적으로 개발
  • HTML5 / CSS3 지원

단점 :

  • D̶o̶e̶s̶n̶'̶t̶ ̶s̶u̶p̶p̶o̶r̶t̶ ̶x̶6̶4̶ ̶ (̶A̶p̶p̶ ̶m̶u̶s̶t̶ ̶b̶e̶ ̶b̶u̶i̶l̶t̶ ̶f̶o̶r̶ ̶x̶8̶6̶6̶)

GeckoFX는 WinForms 응용 프로그램에 포함하기위한 크로스 플랫폼 Webrowser 컨트롤입니다. Windows에서는 .NET, Linux에서는 모노와 함께 사용할 수 있습니다. Gecko는 Firefox에서 사용하는 레이아웃 엔진입니다.

GeckoFX가 적극적으로 개발되지 않았다는 정보는 거의 없었습니다. 물론 Firefox보다 항상 1-2 버전이지만 실제로는 활동과 컨트롤 자체에 깊은 인상을 받았습니다. 필요한 모든 작업을 수행하지만 실행하는 데 약간의 시간이 필요했습니다. 실행하려면 약간의 자습서가 있습니다.

  1. GeckoFx-Windows-16.0-0.2를 다운로드 하십시오. 여기에서 최신 버전이 있는지 확인할 수 있습니다. GeckoFX
  2. 다운로드 한 두 개의 dll에 대한 참조 추가
  3. GeckoFX는 래퍼이므로 XulRunner가 필요합니다. 버전 목록 으로 이동하여 필요한 것을 확인하십시오.
  4. 필요한 XulRunner 버전을 확인 했으므로 Mozilla XulRunner 릴리스 로 이동하여 버전 폴더-> 런타임-> xulrunner- (your_version) .en-US.win32.zip으로 이동하십시오.이 경우 xulrunner-16.0.en- US.win32.zip
  5. 모든 파일을 압축 해제하고 모든 파일을 bin \ Debug에 복사하십시오 (또는 프로젝트가 릴리스로 설정된 경우 릴리스).
  6. 양식의 Visual Studio 디자이너로 이동하고 도구 상자로 이동하여 내부를 마우스 오른쪽 버튼으로 클릭-> 항목 선택-> 찾아보기-> 다운로드 한 GeckoFX winforms dll 파일 찾기-> 확인
  7. 이제 새로운 제어 GeckoWebBrowser가 있어야합니다.

실제로 Chrome을 사용해야하는 경우 Awesomium 이라는이 제품을 살펴보십시오. 비상업적 프로젝트에는 무료이지만 라이센스는 수천 달러입니다.


4
GeckoFx를 시작하고 실행하는 방법에 대한 아주 좋은 설명. +1
Alex Essilfie 2016 년

Geckofx-Winforms를 빌드 할 때 4 개의 gtk # 라이브러리 (atk-sharp, gdk-sharp, glib-sharp 및 gtk-sharp)가 필요했기 때문에 Mono를 먼저 설치해야했습니다.
bernhardrusch

이 답변은 훌륭합니다.
Mike Cole

실제로 훌륭한 분석. C # 응용 프로그램으로 Awesomium 을 테스트 했는지 알고 싶습니다 . 그것에 대해 어떤 말이 있습니까? 아직 테스트하지는 않았지만 자신의 페이지에서 언급 한 트러스트 패널을보고 나에게 믿을만한 것 같습니다.
Abdul Rehman

2
@Wayne 당신이 그것을 올바르게하고 싶다면 모든 파일, gecko fx dll 및 xul runner 파일을 포함시킬 프로젝트 또는 speparate 프로젝트에 폴더를 생성하고 항상 복사하도록 설정해야합니다. 빌드 / 디버그 폴더에 복사하거나 VS에서 게시하는 경우 게시, 도움이되기를 바랍니다 당신이 호출해야하고 당신이 그것을 XUL 러너 파일 경로를 통과 할 수 있음을 또한 Xpcom.Initialize의 방법이있다
formatc

41

나는 같은 문제가 있었다 .WebBrowser는 이전 버전의 IE를 사용하고 있었고, 인터넷 검색을 통해 레지스트리를 변경하고 WebBrowser가 가능한 최신 IE 버전을 사용하도록하는 다음 코드를 발견했다.

 public enum BrowserEmulationVersion
    {
        Default = 0,
        Version7 = 7000,
        Version8 = 8000,
        Version8Standards = 8888,
        Version9 = 9000,
        Version9Standards = 9999,
        Version10 = 10000,
        Version10Standards = 10001,
        Version11 = 11000,
        Version11Edge = 11001
    }
    public static class WBEmulator
    {
        private const string InternetExplorerRootKey = @"Software\Microsoft\Internet Explorer";

        public static int GetInternetExplorerMajorVersion()
        {
            int result;

            result = 0;

            try
            {
                RegistryKey key;

                key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey);

                if (key != null)
                {
                    object value;

                    value = key.GetValue("svcVersion", null) ?? key.GetValue("Version", null);

                    if (value != null)
                    {
                        string version;
                        int separator;

                        version = value.ToString();
                        separator = version.IndexOf('.');
                        if (separator != -1)
                        {
                            int.TryParse(version.Substring(0, separator), out result);
                        }
                    }
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }

            return result;
        }
        private const string BrowserEmulationKey = InternetExplorerRootKey + @"\Main\FeatureControl\FEATURE_BROWSER_EMULATION";

        public static BrowserEmulationVersion GetBrowserEmulationVersion()
        {
            BrowserEmulationVersion result;

            result = BrowserEmulationVersion.Default;

            try
            {
                RegistryKey key;

                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);
                if (key != null)
                {
                    string programName;
                    object value;

                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);
                    value = key.GetValue(programName, null);

                    if (value != null)
                    {
                        result = (BrowserEmulationVersion)Convert.ToInt32(value);
                    }
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }

            return result;
        }
        public static bool SetBrowserEmulationVersion(BrowserEmulationVersion browserEmulationVersion)
        {
            bool result;

            result = false;

            try
            {
                RegistryKey key;

                key = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, true);

                if (key != null)
                {
                    string programName;

                    programName = Path.GetFileName(Environment.GetCommandLineArgs()[0]);

                    if (browserEmulationVersion != BrowserEmulationVersion.Default)
                    {
                        // if it's a valid value, update or create the value
                        key.SetValue(programName, (int)browserEmulationVersion, RegistryValueKind.DWord);
                    }
                    else
                    {
                        // otherwise, remove the existing value
                        key.DeleteValue(programName, false);
                    }

                    result = true;
                }
            }
            catch (SecurityException)
            {
                // The user does not have the permissions required to read from the registry key.
            }
            catch (UnauthorizedAccessException)
            {
                // The user does not have the necessary registry rights.
            }

            return result;
        }

        public static bool SetBrowserEmulationVersion()
        {
            int ieVersion;
            BrowserEmulationVersion emulationCode;

            ieVersion = GetInternetExplorerMajorVersion();

            if (ieVersion >= 11)
            {
                emulationCode = BrowserEmulationVersion.Version11;
            }
            else
            {
                switch (ieVersion)
                {
                    case 10:
                        emulationCode = BrowserEmulationVersion.Version10;
                        break;
                    case 9:
                        emulationCode = BrowserEmulationVersion.Version9;
                        break;
                    case 8:
                        emulationCode = BrowserEmulationVersion.Version8;
                        break;
                    default:
                        emulationCode = BrowserEmulationVersion.Version7;
                        break;
                }
            }

            return SetBrowserEmulationVersion(emulationCode);
        }
        public static bool IsBrowserEmulationSet()
        {
            return GetBrowserEmulationVersion() != BrowserEmulationVersion.Default;
        }
    } 

클래스를 만들고이 코드를 넣은 다음 프로그램이 시작될 때 다음 코드를 실행하면됩니다.

 if (!WBEmulator.IsBrowserEmulationSet())
            {
                WBEmulator.SetBrowserEmulationVersion();
            }

VB.NET :

Imports Microsoft.Win32
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Security
Imports System.Text
Imports System.Threading.Tasks

Public Enum BrowserEmulationVersion
    [Default] = 0
    Version7 = 7000
    Version8 = 8000
    Version8Standards = 8888
    Version9 = 9000
    Version9Standards = 9999
    Version10 = 10000
    Version10Standards = 10001
    Version11 = 11000
    Version11Edge = 11001
End Enum


Public Class WBEmulator
    Private Const InternetExplorerRootKey As String = "Software\Microsoft\Internet Explorer"
    Public Shared Function GetInternetExplorerMajorVersion() As Integer

        Dim result As Integer

        result = 0

        Try
            Dim key As RegistryKey
            key = Registry.LocalMachine.OpenSubKey(InternetExplorerRootKey)
            If key IsNot Nothing Then
                Dim value As Object = If(key.GetValue("svcVersion", Nothing), key.GetValue("Version", Nothing))

                Dim Version As String
                Dim separator As Integer
                Version = value.ToString()
                separator = Version.IndexOf(".")
                If separator <> -1 Then
                    Integer.TryParse(Version.Substring(0, separator), result)
                End If
            End If

        Catch ex As SecurityException
            'The user does Not have the permissions required to read from the registry key.
        Catch ex As UnauthorizedAccessException
            'The user does Not have the necessary registry rights.
        Catch

        End Try
        GetInternetExplorerMajorVersion = result
    End Function
    Private Const BrowserEmulationKey = InternetExplorerRootKey + "\Main\FeatureControl\FEATURE_BROWSER_EMULATION"

    Public Shared Function GetBrowserEmulationVersion() As BrowserEmulationVersion

        Dim result As BrowserEmulationVersion
        result = BrowserEmulationVersion.Default

        Try
            Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True)
            If key IsNot Nothing Then
                Dim programName As String
                Dim value As Object
                programName = Path.GetFileName(Environment.GetCommandLineArgs()(0))
                value = key.GetValue(programName, Nothing)
                If value IsNot Nothing Then
                    result = CType(Convert.ToInt32(value), BrowserEmulationVersion)
                End If
            End If
        Catch ex As SecurityException
            'The user does Not have the permissions required to read from the registry key.
        Catch ex As UnauthorizedAccessException
            'The user does Not have the necessary registry rights.
        Catch

        End Try

        GetBrowserEmulationVersion = result
    End Function
    Public Shared Function SetBrowserEmulationVersion(BEVersion As BrowserEmulationVersion) As Boolean

        Dim result As Boolean = False

        Try
            Dim key As RegistryKey = Registry.CurrentUser.OpenSubKey(BrowserEmulationKey, True)
            If key IsNot Nothing Then
                Dim programName As String = Path.GetFileName(Environment.GetCommandLineArgs()(0))
                If BEVersion <> BrowserEmulationVersion.Default Then
                    'if it's a valid value, update or create the value
                    key.SetValue(programName, CType(BEVersion, Integer), RegistryValueKind.DWord)
                Else
                    'otherwise, remove the existing value
                    key.DeleteValue(programName, False)
                End If
                result = True
            End If
        Catch ex As SecurityException

            ' The user does Not have the permissions required to read from the registry key.

        Catch ex As UnauthorizedAccessException

            ' The user does Not have the necessary registry rights.

        End Try

        SetBrowserEmulationVersion = result
    End Function


    Public Shared Function SetBrowserEmulationVersion() As Boolean
        Dim ieVersion As Integer
        Dim emulationCode As BrowserEmulationVersion
        ieVersion = GetInternetExplorerMajorVersion()

        If ieVersion >= 11 Then

            emulationCode = BrowserEmulationVersion.Version11
        Else

            Select Case ieVersion
                Case 10
                    emulationCode = BrowserEmulationVersion.Version10
                Case 9
                    emulationCode = BrowserEmulationVersion.Version9
                Case 8
                    emulationCode = BrowserEmulationVersion.Version8
                Case Else
                    emulationCode = BrowserEmulationVersion.Version7
            End Select
        End If

        SetBrowserEmulationVersion = SetBrowserEmulationVersion(emulationCode)
    End Function

    Public Shared Function IsBrowserEmulationSet() As Boolean
        IsBrowserEmulationSet = GetBrowserEmulationVersion() <> BrowserEmulationVersion.Default
    End Function
End Class

다음과 같이 사용할 수 있습니다.

If Not WBEmulator.IsBrowserEmulationSet() Then
    WBEmulator.SetBrowserEmulationVersion()
End If

1
우수한!! 정말 고맙습니다!
Ben

1
Python으로 번역하고 (IronPython 응용 프로그램에서 작동) 완벽하게 작동했습니다. 감사!
David

1
그건 내 생명을 구해! 감사합니다
Neeraj Dubey

1
환상적이지만 에뮬레이션 버전을 재설정 할 수 있습니까? 버전은 WinForms 응용 프로그램에서 한 번만 설정할 수 있습니다. 재설정 된 것처럼 보이는 것이 가능하지만, 일단 레지스트리를 설정하고 재설정하면 WinForms 앱에서 새 레지스트리 값으로 다시 읽히지 않습니다.
cymorg

1
내가 알고있는 멀리 @DarrenMB는 IE11을 사용
Ashkan Mobayen Khiabani에게

27

레지스트리를 사용하여 웹 브라우저 제어를위한 IE 버전을 설정할 수 있습니다. HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATION으로 이동하여 browser_emulation 값으로 "yourApplicationName.exe"를 추가하십시오. browser_emulation의 값을 보려면 링크를 참조하십시오. http://msdn.microsoft.com/en-us /library/ee330730%28VS.85%29.aspx#browser_emulation


10
Visual Studio에서 디버깅하는 경우 아마도 "yourApplicationName.vshost.exe"를 사용해야 할 것입니다.
newenglander

3
Visual Studio에서 디버깅하는 경우 프로젝트 속성의 디버그 탭에서 "Visual Studio 호스팅 프로세스 사용"을 선택 취소하면됩니다. 그런 다음 "vshost"부분없이 exe 이름을 사용할 수 있습니다.
Daniel Vygolov

1
@golavietnam이 문제를 도와 주시겠습니까? 귀하의 지침을 따르고 귀하가 제공 한 링크의 지침을 사용했지만 여전히 작동하지 않습니다. 웹 브라우저 컨트롤을 사용하여 WhatIsMyBrowser.com을 방문하면 7 호환 모드 에서 ie11 BUT을 사용 하고 있으며 많은 웹 사이트가 작동하지 않고 "브라우저를 업그레이드하십시오"라는 메시지가 표시됩니다. 웹 브라우저 컨트롤이 최신 버전의 ie를 사용하도록 강제 할 수있는 방법 (예 : 11)이 작동하지 않으면 백 번 시도했습니다.
jay_t55

고맙습니다, 일하고 하루를 구했습니다
Tấn Nguyên

18

Mono.WebBrowser 컨트롤을 살펴보십시오 -Firefox 에서 사용하는 Gecko 또는 Safari에서 사용하는 WebKit을 WinForms에 포함합니다 (ActiveX를 사용하지 않음).


16

나는 이것이 '바꾸기'웹 브라우저 컨트롤이 아니라는 것을 알고 있지만 레이아웃 등을 위해 BootStrap 3 +를 사용하는 페이지를 표시하는 동안 약간의 렌더링 문제가 있었으며 다음을 사용하도록 제안하는 게시물을 찾았습니다. 분명히 그것은 IE에만 ​​해당되며 렌더링을 위해 클라이언트 컴퓨터에서 발견 된 최신 변형을 사용하도록 지시합니다 (따라서 IE7은 기본값이라고 생각하지 않습니다)

그냥 넣으십시오 :

<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

문서의 머리 부분에 있습니다.

물론 문서가 아니라면 분명히 도움이되지는 않습니다 (웹 브라우저 컨트롤을 통해 자신이 만들지 않은 페이지를 읽는다면 개인적으로 보안 구멍이라고 생각하지만 웹 브라우저를 사용하는 이유는 무엇입니까?)

행운을 빕니다.


당신은 IE7을 실행하는 PC에서 작동이 원하는 경우를 두지 않는 에서 <head>의 첫 번째 자식으로 넣어 <head>. 이것을 알아내는 데 시간이 걸렸습니다.
Sylvain

죄송합니다. 이전 의견에서 IE8이 아닌 IE8을 의미했습니다. 따라서 IE8에서 <meta>의 첫 번째 자식으로를 배치하지 않으면 <head>에지 모드가 아닌 호환성 모드에서 실행됩니다.
Sylvain

winform 앱에서 웹 브라우저 플러그인을 사용하고 있었고 이것은 큰 도움이되었습니다. 내가 치는 페이지는 jquery & angularjs를 사용하고 있었는데 IE10이 설치되어 있어도 브라우저가 IE7이라고 생각했기 때문에 질식했습니다.
Kywillis

저에게 효과적입니다! 이것을 사용하여 특정 버전의 IE로 설정할 수 있습니다 : <meta http-equiv = "X-UA-Compatible"content = "IE = 10"/> 브라우저는 항상 10으로 작동합니다 (물론 필요합니다) 같은 버전 또는 더 높은 버전을 설치
freedeveloper

이것은 내 유스 케이스에 완벽합니다. 더 좋은 html 형식의 보고서를 보여주고 싶습니다. 이미 많은 CSS 컨텐츠가 있습니다. 이것은 크롬 / 파이어 폭스를 삽입하는 것보다 더 나은 방법입니다.
MD Luffy

13

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 패키지 로 제공됩니다 .


16
이 제품의 높은 가격에주의하십시오
jjxtra

3
오픈 소스가 아니며 라이센스가 저렴하지 않습니다.
Ashish-BeJovial

8

나는 소수의 Webkit 변형을 시도했지만 내 경험상 OpenWebkitSharp 의 발전을 능가하는 것은 없습니다 . HTML5 및 CSS3 점수는 Chrome에 최대한 가깝습니다. 매우 멋진 API 및 이벤트 모델. "구현되지 않은"API는 Webkit에서 구현되지 않았기 때문에 가능성이 높습니다. 다른 모든 것이 훌륭하게 작동합니다.

OpenWebKitSharp는 WebKit.NET 0.5 프로젝트를 기반으로하는 웹킷 엔진을위한 .net 래퍼입니다. 0.5 버전에 더 많은 기능을 추가하고 해당 빌드보다 더 많은 방법을 제공합니다. OpenWebKitSharp는 Cairo 빌드 (0.5)와 야간 웹킷 빌드 (기본적으로 밤마다)를 모두 지원합니다. 버전 1.5 Stable 이상에서는 야간 빌드가 포함되며 빌드 후에 자동으로 복사됩니다. 이전 버전에서는 이것이 cairo 빌드에서 발생합니다. OpenWebKitSharp는 현재 빠르고 안정적이며 유연한 웹 브라우저 인 GTLite Navigator에 전원을 공급합니다.


1
감사. 그것은 큰 발견처럼 보입니다!
Sylverdrag

그들의 포럼도 활발하고 질문에 대한 답변이 매우 신속합니다. 이제 모든 웹 브라우저 제어 요구에 이것을 사용하고 있습니다
Vin

2
그렇습니다. ExecuteScript라고합니다. 그러나 CefSharp로 전환했으며 OWS보다 더 나은 방식을 선호한다고 말할 수 있습니다.
Vin

1
무엇보다 사용하기에 불가능한 또 다른 역겨운 코드 혼란.
Kraang Prime

1
웹킷이 프록시 메신저 사용에 문제가 있음을 조심하십시오
skhurams

7

2018 년 업데이트

Windows 10에서 실행할 응용 프로그램을 대상으로하는 경우 이제 Windows Community Toolkit 을 사용하여 Edge 브라우저를 .net 응용 프로그램에 포함시킬 수 있습니다 .

WPF 예 :

1) Windows Community Toolkit Nuget 패키지 설치

Install-Package Microsoft.Toolkit.Win32.UI.Controls

2) XAML 코드

<Window
    x:Class="WebViewTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WPF="clr-namespace:Microsoft.Toolkit.Win32.UI.Controls.WPF;assembly=Microsoft.Toolkit.Win32.UI.Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WebViewTest"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Grid>
        <WPF:WebView x:Name="wvc" />
    </Grid>
</Window>

3) CS 코드 :

public partial class MainWindow : Window
{
  public MainWindow()
  {
    InitializeComponent();

    // You can also use the Source property here or in the WPF designer
    wvc.Navigate(new Uri("https://www.microsoft.com"));
  }
}

WinForms 예 :

public partial class Form1 : Form
{
  public Form1()
  {
    InitializeComponent();

    // You can also use the Source property here or in the designer
    webView1.Navigate(new Uri("https://www.microsoft.com"));
  }
}

자세한 내용은이 링크 를 참조하십시오.


Nuget 패키지를 설치했지만 작동하지 않습니다. 여전히 타이.
Deniz

6

EO.WebBrowser을 사용해보십시오 . 새로운 기능이며 최신 버전의 Chrome 브라우저를 기반으로합니다. 그것의 가장 좋은 부분은 단일 .NET dll 안에 모든 것을 담아서 사용하고 배포하기 쉬울뿐만 아니라 .NET dll이기 때문에 동일한 DLL이 32 비트와 64 비트를 모두 지원한다는 것입니다.


9
앞으로는이 제품이 상업적으로 라이센스가 부여 된 제품이며 제품과 관련이 있는지 여부 에 대해서는 FAQ에서 명백한 자체 홍보 방지를 참조 하십시오 .
Andy Brown

1
YEARS에 대한 열광적 인 사람처럼 검색 한 후 ----이 "상업적"컨트롤은 말 그대로 IE를 대체 할 수있는 유일한 대체 기능입니다. 현재 브라우저에서 문제를 일으키지 않고 현재 브라우저를 망치지 않았습니다. 설정. -신고하는 경우 모양이나 형태에 관계없이 EO와 관련이 없습니다. 나는 다른 모든 솔루션이 완전히 쓰레기라고 말하면서 완전히 쓰레기와 모든 시간을 낭비한다고 화나게했습니다.
Kraang Prime

@SanuelJackson GeckoFx는 우리 회사에서 완벽하게 일하고 있으며 브라우저 설정에 문제를 일으키지 않았습니다
Wayne

@ 웨인-당신에게 반갑습니다. 이러한 오픈 프로젝트 중 어느 것도 특히 드롭 인 winforms 컨트롤로 관리되는 코드로 작동하기 위해 상당한 수정이 필요한 드롭 인 대체품이 아닙니다. 그들은 IE 컨트롤이 제공하는 기능이 없거나 지속적으로 충돌하거나 느리기 때문에 완벽하지 않습니다. 여기에 모든 문제를 나열 할 수도 없습니다. 인터넷이 더 이상 웹 브라우저를 필요로하지 않는 다른 10 년 동안 아마도 실행 가능한 것이있을 수 있습니다.
Kraang Prime

@SanuelJackson Hmm, 당신이 말한 것이 사실이기를 바랍니다. 불행히도 GeckoFX를 포함한 대안 중 어느 것도 나를 위해 멈추지 않는 오류가 없었습니다. 또한 Essential Objects 브라우저의 높은 가격을 피할 수 있었으면 좋겠다. 그러나 그것은 나를 위해 완벽하게 일한 유일한 사람이었습니다.
Maiken Roskilde

5

나는 GeckoFX를 사용했고 그것은 매우 잘 작동합니다. Firefox 엔진을 사용합니다. 내가 만난 유일한 경고는 문서가 실제로 완전히로드되기 전에 "DocumentLoaded"이벤트를 한 번 방출한다는 것입니다 .HTML 이로 드 될 때 하나를 가져온 다음 모든 항목이있을 때 다른 것을 쏘는 것으로 생각합니다. 이미지와 물건이로드됩니다. 나는 첫 번째 것을 무시하여 수정했으며 지금까지 아름답게 작동했습니다.

https://bitbucket.org/geckofx/에서 찾을 수 있습니다.

대부분의 괜찮은 라이브러리와 마찬가지로 오픈 소스입니다.


2
작동하는 모든 firefox 기반 구성 요소는 사용자가 Firefox를 설치하는 것을 망칩니다. 운 좋게도 이러한 솔루션의 대부분은 전혀 작동하지 않으며 운이 좋으면 Firefox 설정을 그대로 유지합니다. 운이 좋으면 모든 설정을 잃어 버리고 IE보다 더 좋은 것은 없습니다.
Kraang Prime

1
링크가 죽었고 오래된 빌드에서. bitbucket.org/geckofx 의 최신 버전
Wayne

@Sanual Jackson-몇 년 동안 GeckoFx를 사용해 왔으며, 내 자신을 포함하여 Firefox 설치와 관련된 문제는 발생하지 않았습니다. 당신은 단지 추측하고 있습니까?
PandaWood

3

MozNet은 이전에 다소 포기 된 GeckoFX 컨트롤을 기반으로 한 .NET 컨트롤이지만 완전히 개발 중이며 GeckoFX가 지원할 수있는 것보다 더 많은 기능이 있습니다. Se7en Soft 웹 사이트 에서 찾을 수 있습니다 .


1
GeckoFX는 다음에서 활발히 개발되고 있습니다 : bitbucket
Wayne


2

2016 업데이트 :

내가 제안 할 수있는 3 가지 추가 옵션이 있습니다.

1. BrowseEmAll.Cef

Chrome 엔진 을 .Net 애플리케이션 에 통합하는 데 사용할 수있는 .Net 구성 요소입니다 . CefGlue를 기반으로 하지만 최신 Chrome 버전으로 업데이트하는 데 약간 빠릅니다. 또한 일부 상용 제품 에는 유용한 지원 옵션이 있습니다. 물론 구성 요소 자체는 오픈 소스 입니다.

2. BrowseEmAll.Gecko

Firefox 엔진 을 .Net 응용 프로그램 에 통합하는 데 사용할 수있는 다른 .Net 구성 요소 이것은 Geckofx를 기반으로 하지만 현재 Geckofx 버전과 달리 Firefox의 일반 릴리스 빌드에서 작동합니다. Geckofx를 사용하려면 Firefox를 직접 빌드해야합니다. 다시 상업적인 지원 이 가능하지만 구성 요소 자체는 완전히 오픈 소스 입니다.

3. BrowseEmAll Core API

.Net 응용 프로그램에 다른 브라우저가 모두 필요하십니까? Chrome, Firefox, Webkit 및 Internet Explorer 를 애플리케이션에 통합 할 수있는 BrowseEmAll Core API 이것은 상업용 제품 이므로 경고합니다.

(전체 공개 : 나는이 회사에서 일하기 때문에 내가 말한 모든 것을 소금 한알로 가져 가십시오)


1

훌륭한 IE 기반 컨트롤을 찾고 있다면 다음을 확인하십시오. http://code.google.com/p/csexwb2/

프로덕션 제품에 사용했습니다. 예전처럼 유지 관리되지 않는 것 같지만 꽤 좋고 데모가 좋습니다.


1

Geckofx와 Webkit.net은 처음에는 유망했지만 Internet Explorer가 개선되는 동안 Firefox와 Chrome을 각각 최신 상태로 유지하지는 못했지만 Webbrowser 컨트롤은 IE 버전과 상관없이 기본적으로 IE7처럼 작동하지만 그러나 레지스트리로 이동하여 HTML5를 허용하는 IE9로 변경하면 해결할 수 있습니다.




0

나는 거기에있는 모든 브라우저를 사용해 보았습니다. 불행히도 모든 상황에서 실제로 나를 위해 일한 유일한 사람은 EO.Browser였습니다. 무료 솔루션을 선택할 수 있었으면 좋았지 만 결국 EO.Browser로 끝났습니다. 꽤 비싸지 만 잘 유지됩니다.


0

2016 업데이트 :

나에게 IE에 대한 신뢰할 수 있고 유지 관리되는 브라우저 대안은 EO.WebBrowser입니다. 나는 다른 사람들을 시험하는 데 며칠과 몇 주를 보냈다. 그들 모두는 어느 시점에서 나를 위해 쇼를 중단시키는 몇 가지 문제가있었습니다.


1
글쎄 ... 나는 일주일 동안 pratted? MS WebBrowser가 작동하도록 노력하십시오. 나를 위해 처음으로 일한 EO.WebBrowser를 제외하고 다른 = :-{를 시도하지 않았습니다. 따라서 EO로 20 분 동안 성공했고 MS에서는 5 일 동안 성공했으며 완전하고 완전히 무의미한 실패였습니다. 내가 지금해야 할 일은 '성공'을 사기 위해 $ 750를 찾는 것입니다 !!!
Richard Hammond

0

https://www.webkitx.com에서 WebKitX 와 같은 상용 제품을 살펴볼 가치가 있습니다.

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

Chromium Embedded Framework를 사용 하고 Windows XP 7, 7, 10에서 HTML5, WebGL, PDF 및 Flash를 렌더링합니다. 또한 32 비트 및 64 비트의 다양한 컨트롤을 제공합니다.

IE WebBrowser 컨트롤과 유사한 COM 개체를 사용하여 DOM 액세스를 제공합니다.

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

스칼라 인수 (eval을 사용하지 않음)를 전달하는 함수 이름으로 JavaScript를 호출 할 수 있으며 Angular에 대한 JavaScript 콜백 도 있습니다 .

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

상호 운용 가능한 COM 개체를 JavaScript에 추가 할 수 있습니다.

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

HTML5 게임용 WebGL / WebAudio를 지원하며 Citrix 환경에서 사용하지 않도록 설정할 수 있습니다.

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


나는 그것을 생산에 사용하고 그것을 완전히 신뢰합니다. 나는 많은 다른 사람들을 시험해 보았고이 브라우저에 붙어 있습니다. 개발자들은 정말 좋고 개인적입니다. 나는 다른 많은 사람들과 같이 홀로 남는 느낌이 들지 않았습니다. 정말 좋고 안정적인 제품.
전능하신

따라서 면책 조항이 필요하므로 Elias는 자신이 WebfxX의 제작자 인 mobilefx의 CTO임을 지적하는 것이 좋을 것입니다.
hko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.