.NET WebBrowserコントロールを、Chromeなどのより優れたブラウザーに置き換えますか?


433

最新のブラウザーを.NETアプリケーションに挿入する比較的簡単な方法はありますか?

私が理解している限り、このWebBrowserコントロールはIEのラッパーです。これは、CSSのねじ込み、潜在的なセキュリティリスクを伴う非常に古いバージョンのIEのように見えることを除いて、問題にはなりません。(レンダリングエンジンにパッチが適用されていなかった場合、ジリオンのバッファオーバーフローの問題が修正されることを本当に期待できますか?)、およびその他の問題。

Visual Studio C#を使用しています(Express Edition-ここで何か違いはありますか?)

アプリケーションに優れたWebブラウザーを統合したいと考えています。一部では、ユーザー登録プロセスの処理、自分のWebサイトの機能の一部とのその順序の他の操作とのやり取りに使用していますが、別のアプリケーションを考えており、より多くのerr ...コントロールが必要になります。

私は欲しい:

  • アプリケーションのウィンドウ内に統合できるブラウザー(別個のウィンドウではない)
  • CSS、js、その他のWebテクノロジーの優れたサポートで、最新のブラウザーと同等
  • 「ナビゲート」、「戻る」、「リロード」などの基本的なブラウザ機能...
  • ページコードと出力への自由なアクセス。

BSDライセンスの下にあるChromeについて考えていましたが、最新バージョンのIEでも同じように満足しています。

出来るだけシンプルにしたいと思います。WebBrowser必要なものの約70%を既に実行している既存のコントロールにパッチを適用できるのが最善ですが、それは可能ではないと思います。

Mozilla(http://www.iol.ie/~locka/mozilla/control.htm)のactiveXコントロールを見つけましたが、古いバージョンのように見えるため、必ずしも改善されているわけではありません。

提案を受け入れる


19
WebBrowserコントロールが古いバージョンのIEを使用していると言うのはなぜですか?IE8 Webブラウザーは、IE7のレンダリングをデフォルトに見えるが、それは、ユーザーのシステムにインストールされているバージョンを使用しています:blogs.msdn.com/ie/archive/2009/03/10/...
ティム・ロビンソン

17
私のマシンではそのように見えないからです。IE8をインストールしましたが、コントロールに表示される表示の問題はIE 5以降に見られません。非常に単純なログインフォーム、CSSをタッチした2つのフィールドに文字化けがあり、一部のJavaScript表示は機能しませんが、表示されます。 IE8、Firefox、Chrome、Operaでは問題ないので、レンダリングエンジンは古いものだと思いました。私はそれについて完全に間違っている可能性があり、おそらく問題は私が思っていたものと実際には異なります。
Sylverdrag 2009

3
@Sylverdrag:あなたは間違っている。システムで最新のIEを使用します。ただし、どこかで、WebBrowserコントロールにはスタンドアロンブラウザーよりも下位互換性の問題が強いと書いています。IE8には、たとえば、アイコンをクリックしてIE7モードをオンにすることができます。プログラムの一部としてこれは不可能なので、コントロールは互換性のためにデフォルトで以前のモードに設定されます。OTOH、「IE8モード」を使うように設定する方法をまだ読んでいません。
John Saunders、

55
実際、ジョン・サンダース、あなたは間違っている。ie4を使用しており、currentを使用するようにレジストリ値を変更する必要があります。「機能モードエミュレーション」を検索すると、最近変更されたurの回答が得られ、以前はキーワードネイティブが含まれていましたが、変更されました。「webbrowser control」で述べたキーワードをグーグル検索すると、msdnの記事が見つかります。
Erx_VB.NExT.Coder

8
デフォルトで、WebBrowserで特に指示されていない限り、ホストされたコントロールはIE7エミュレーションを使用しFEATURE_BROWSER_EMULATIONます。これは、ここに記載されています:blogs.msdn.com/b/askie/archive/2009/03/23/...
noseratio

回答:


171

チェックアウトCefSharp .Netバインディング、私がしばらく前に始めたプロジェクトは、ありがたいことにコミュニティーに取り上げられ、素晴らしいものになりました。

このプロジェクトはChromium Embedded Frameworkをラップしており、RdioのWindowsクライアント、Facebook Messenger for Windows、Github for Windowsなどの多くの主要プロジェクトで使用されています。

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はすばらしいですが、ライブラリが非常に大きく(最後に私が見た20+ mb)、そのため、より軽量なプロジェクトには適さない可能性があることに注意してください。
Skyl3lazer、2015年

1
@ANguyenはい、できます
チリトム

1
このプロジェクトを始めたのはあなたなのです!最近cefsharpを使用しましたが、ライブラリのサイズが80+ MBと大きいことがわかりましたが、アプリケーションの適切な機能(特にスムーズなレンダリング)に必要です。これを減らす方法はありますか?
Aditya Bokade

5
これは私のプロジェクトを壊しました。winforms nugetパッケージのインストール後にすべての参照が壊れます。
toddmo

84

Chromeは、知らない場合はWebkit(のフォーク)を使用します。これは、Safariでも使用されています。これは、同じ傾向のいくつかの質問です。

他の回答が述べているように、webkitは素晴らしいものではなく、1つのバージョンは機能しなくなり(google code one)、Monoは実験的なものです。誰かがそれのためにまともな.NETラッパーを作成しようと努力したのはいいことですが、それは誰もがやりたいように思われることではありません。これは、HTML5とIE(8 )エンジンが不足しています。

アップデート(2014)

Awesomiumと呼ばれる.NETアプリケーションにChromeを埋め込むことができる新しいデュアルライセンスプロジェクトがあります。.NET APIが付属していますが、レンダリングにはかなりの数のハックが必要です(例では、ブラウザーウィンドウをバッファーに描画し、バッファーを画像として描画し、タイマーで更新します)。

私が考えるこれが戦場3に起源が使用するブラウザです。

アップデート(2016)

現在、Awesomiumに代わる商用のDotnetBrowserがあります。Chromiumをベースにしています。


ありがとう。Geckoラッパーを見てみましょう。ただし、元の回答では「Mozilla ActiveXコントロールを登録するだけでよい」との回答があり、Expressエディションでは追加のコントロールを登録できないと思っていました。明らかなものがないのですか?
Sylverdrag 2009

4
@Syl Expressエディションは、必要な数のコントロールを登録できます。彼らがしないことは、あなたがビジュアルスタジオにプラグインをインストールできるようにすることです。
Joel Coehoorn、2010

1
C#でWebKitを使用するのはかなり悪い経験があり、最後に.NETに付属するデフォルトのWebブラウザーコンポーネントを使用する必要がありました
Sumit Ghosh

1
この日付の時点で、上記のプロジェクトは実行可能なドロップイン置換ではありません。コンパイラエラーが大量に発生+不安定。Awesomiumは完全でゴミ箱です。
Kraang Prime

「これはバトルフィールド3でOriginが使用しているブラウザだと思います。」これは誤りです。これを知っているのは、このアプリを強制的に使用しなければならなかったからです。つまり、Windows 10でエッジを設定するとデフォルトで機能しなかったためです。これは少し前のことで、おそらく解決された問題です。
Theyouthis 2016

64

私は数日間C#Webブラウザーコンポーネントの代替をテストしてきましたが、これが私のリストです。

1.新しいIEバージョン8,9を使用:

WebブラウザーコンポーネントはIE8ではなくIE7ですか?これを変更するには?

長所:

  • 実行するために必要な作業はそれほど多くありません
  • IE9の場合は一部のHTML5 / CSS3サポート、IE10の場合は完全

短所:

  • ターゲットマシンにはターゲットのIEバージョンがインストールされている必要があります。Win7ではIE10がまだプレビューされています。

これは多くの作業を必要とせず、いくつかのHTML5とCSS3のサポートを得ることができますが、IE9にはCSS3とHTML5の最高の機能がいくつかありません。しかし、IE10を同じように実行できると確信しています。問題は、ターゲットシステムにIE10がインストールされている必要があることです。Windows7ではまだプレビュー中なので、これはお勧めしません。

2. OpenWebKitSharp

OpenWebKitSharpは、WebKit.NET 0.5プロジェクトに基づくwebkitエンジンの.netラッパーです。WebKitはChrome / Safariで使用されるレイアウトエンジンです

長所:

  • 積極的に開発
  • HTML5 / CSS3サポート

短所:

  • 実装されていない多くの機能
  • x64をサポートしていません(アプリはx86用にビルドする必要があります)

OpenWebKitは非常に優れていますが、多くの機能はまだ実装されていません。ビジュアルスタジオでこれを使用すると、ここでnullオブジェクト参照がスローされ、デザインモードでjsの問題が発生する問題がいくつか発生しました。それを使用している誰もが、すぐにjs alertが何もしないことに気付くでしょう。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̶)̶コメントを参照

GeckoFXは、WinFormsアプリケーションに埋め込むためのクロスプラットフォームWebrowserコントロールです。これは、Windowsでは.NET、Linuxではモノで使用できます。Geckoは、Firefoxで使用されるレイアウトエンジンです。

GeckoFXは積極的に開発されていないという情報にぶつかりましたが、これは事実ではありません。もちろん、Firefoxのバージョンは常に1つまたは2つ遅れていますが、それは正常なことです。アクティビティとコントロール自体に本当に感銘を受けました。それは私が必要とするすべてを行います、しかし私はそれを動かすためにいくらかの時間を必要としました、それをそれを動かすための小さなチュートリアルです:

  1. GeckoFx-Windows-16.0-0.2をダウンロードしてください。新しいGeckoFXが利用可能かどうかをここで確認できます
  2. ダウンロードした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. フォームのビジュアルスタジオデザイナーに移動し、ツールボックスに移動して、内部を右クリックします->アイテムを選択します->参照->ダウンロードしたGeckoFX winforms dllファイルを見つけます-> OK
  7. これで、新しいコントロールGeckoWebBrowserができました。

本当にChromeを使用する必要がある場合は、Awesomiumと呼ばれるこの製品をご覧ください。非営利プロジェクトには無料ですが、営利目的のライセンスは数千ドルです。


4
GeckoFxを起動して実行する方法についての非常に良い説明。+1
Alex Essilfie 2013年

Geckofx-Winformsをビルドするとき、4つのgtk#ライブラリ(atk-sharp、gdk-sharp、glib-sharp、gtk-sharp)が必要だったので、最初にMonoをインストールする必要がありました。
bernhardrusch 2013

この答えは壮観です。
Mike Cole 14

確かに素晴らしい分析。C#アプリケーションでAwesomiumをテストしたかどうか知りたいのですが。それについて何か言いたいことはありますか?私はまだそれをテストしていませんが、彼らが彼らのページで言及した受託者のパネルを見た後、私には信頼できるようです。
Abdul Rehman 2014年

2
@Wayne正しく実行したい場合は、プロジェクトまたは別のプロジェクトにフォルダーを作成し、そこにすべてのファイル、gecko fx dll、およびxul runnerファイルを含め、常にコピーするように設定してから、すべてのビルドアクションでそれらを取得します。 build / debugフォルダーにコピーするか、VSから公開する場合は公開します。呼び出す必要のあるXpcom.Initializeメソッドもあり、xul runnerファイルパスを渡すことができます。これが役立つことを願っています
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
優秀な!!どうもありがとうございます!
ベン

1
Pythonに翻訳し(IronPythonアプリケーションで動作)、完全に動作しました。ありがとう!
デビッド

1
それは私の命を救います!ありがとう
Neeraj Dubey 2017年

1
これは素晴らしいですが、エミュレーションバージョンをリセットすることは可能ですか?WinFormsアプリケーションでバージョンを設定できるのは1回だけのようです。リセットされたように見せることは可能ですが、いったん設定してレジストリでリセットすると、WinFormsアプリで新しいレジストリ値で再度読み取られることはありません。
cymorg

1
@DarrenMBがIE11を使用している限り
Ashkan Mobayen Khiabani

27

レジストリを使用して、WebブラウザーコントロールのIEバージョンを設定できます。HKLM \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BROWSER_EMULATIONに移動し、「yourApplicationName.exe」にbrowser_emulationの値を追加します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 2014年

1
@golavietnamこれを手伝ってくれませんか。私はあなたの指示を試して、あなたが提供したリンクの指示を使用しましたが、それでもまだ機能しません。Webブラウザーコントロールを使用してWhatIsMyBrowser.comにアクセスすると、IE 7互換モードでIE11 BUTを使用していることがわかり、多くのWebサイトが機能しなくなり、「ブラウザーをアップグレードしてください」というメッセージが表示されます。この方法でインストールされている(ie11)の最新バージョンのieを使用するようにwebbrowserコントロールを強制するにはどうしたらいいですか?私は100回試しました。
jay_t55 14年

それは私の一日働いたと保存された、ありがとう
タングエン


16

これが「代替」のWebBrowserコントロールではないことはわかっていますが、レイアウトなどにBootStrap 3+を使用しているページを表示しているときに、いくつかのひどいレンダリングの問題があり、次の使用を提案する投稿を見つけました。どうやらそれはIEに固有であり、クライアントマシンで検出された最新のバリエーションを使用してレンダリングするように指示します(したがって、デフォルトであると信じているため、IE7は使用しません)。

だからちょうど入れます:

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

ドキュメントの先頭部分のどこかに。

もちろんそれがあなたのドキュメントではない場合、これは明らかに役に立たないでしょう(あなたがwebbrowserコントロールを介して自分で作成していないページを読んでいる場合、私は個人的にはセキュリティホールと見なします-webbrowserを使用しないでください!)

幸運を。


IE7を実行しているPCでこれを機能させたい場合は、のどこかに配置せず<head>、の最初の子として配置してください<head>。これを理解するにはしばらく時間がかかりました。
シルヴァン2014年

申し訳ありませんが、以前のコメントでIE7ではなくIE8を意味していました。したがって、IE8では、<meta>をの最初の子として配置しない場合<head>、エッジモードではなく互換モードで実行されます。
シルヴァン

winformアプリでwebbrowserプラグインを使用していて、これは非常に役立ちました。IE10がインストールされていても、ブラウザがIE7であると思ったので、当たったページがjqueryとangularjsを使用していました。
キウィリス14

それは私のために働きます!これを使用して、特定のバージョンのIEに設定することもできます。例:<meta http-equiv = "X-UA-Compatible" content = "IE = 10" />そして、ブラウザーは常に10として機能します(もちろん、同じバージョン以上をインストールすること
freedeveloper '14 / 02/14

これは私のユースケースに最適です。わかりやすいHTML形式のレポートを表示したい。すでに利用可能なCSSコンテンツはたくさんあります。これは、chrome / firefoxを埋め込むよりも優れたアプローチです。
MDルフィ

13

DotNetBrowserライブラリを見てください。.NETアプリケーションに組み込むのが非常に簡単なChromiumベースのWPFおよびWinFormsブラウザーコントロールを提供します。HTML5、CSS3、JavaScriptを含むすべての最新のWeb標準をサポートしています。レンダリングされたページは、Google Chromeとまったく同じように見えます。

ライブラリはChromiumのマルチプロセスアーキテクチャを継承しています。各Webページは個別のChromiumプロセスでレンダリングされ、プラグインのクラッシュやその他の予期しないエラーがWebページで発生した後でもアプリケーションは機能し続けます。

DotNetBrowserが提供するその他の便利な機能は次のとおりです。ロードイベントのリッスン、ネットワークアクティビティの処理、プロキシの構成、ユーザーアクションのシミュレーション、Cookieの操作、DOMへのアクセスと変更、DOMイベントのリッスン、.NETからのJavaScriptの呼び出しが可能です。逆も同様です。WebページでWebカメラとマイクを使用したり、WebRTCベースの通信を設定したりします

詳細については、APIリファレンスをご覧ください。

以下のコードスニペットは、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のスコアは、Google Chromeに到達するのと同じくらい近いものです。非常に素晴らしいAPIとイベントモデル。Webkitに実装されていないために「実装されていない」APIを見つけた場合。他はすべてうまくいきます。

OpenWebKitSharpは、WebKit.NET 0.5プロジェクトに基づくwebkitエンジンの.netラッパーです。0.5バージョンに機能を追加し、ビルドよりも多くのメソッドを提供します。OpenWebKitSharpは、Cairoビルド(0.5)とWebkitのナイトリービルド(デフォルトではNightly)の両方をサポートしています。バージョン1.5 Stable以降には、ナイトリービルドが含まれており、ビルド後に自動的にコピーされます。以前のバージョンでは、これはcairoビルドで発生します。OpenWebKitSharpは現在、高速で安定した柔軟なWebブラウザーであるGTLiteナビゲーターを強化しています。


1
ありがとう。それは素晴らしい発見のようです!
Sylverdrag 2012

彼らのフォーラムもかなり活発で、私の質問に非常に迅速に回答してくれました。現在、これをすべてのWebブラウザーコントロールのニーズに使用しています
Vin

2
はい、そのすべてを実行します。ExecuteScriptを呼び出します。しかし、私はCefSharpに切り替えて、私はずっといいOWSよりも私のようにそれを伝えることができます
ヴィン

1
まったく何の役にも立たない、もう1つの厄介なコードの混乱。
Kraang Prime

1
webkitはこれに問題があるプロキシimを使用できないことに注意してください
skhurams

7

2018年5月更新

Windows 10で実行するアプリケーションをターゲットにしている場合は、Windows Community Toolkitを使用して、.netアプリケーションにEdgeブラウザを埋め込むことができます。

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パッケージをインストールしましたが、機能しません。まだタイ。
デニズ

6

EO.WebBrowserをお試しください。これは新しく、最新バージョンのChromeブラウザーに基づいています。それについての最もよい部分は、それが単一の.NET dllの中にすべてを詰め込むので、それは非常に使いやすく配備するだけでなく、同じDLLが.NET dllであるため32ビットと64ビットの両方をサポートします。


9
将来的には、これが商用ライセンス製品であること、およびその製品との関係があるかどうかを述べてください。FAQの明白な自己宣伝の回避を参照してください
アンディブラウン14

1
YEARSのマッドハッターのように検索した後、この「コマーシャル」コントロールは、文字通りIEのドロップインの代替品として機能するだけであり、私がいじくり回したり、現在のブラウザーを台無しにしたりする必要はありませんでした。設定。-フラグを立てた場合、私はEOに何らかの形や形で関連付けられていません。私はこれらすべての他の解決策が完全にs__tであることに腹を立てています-完全なゴミと皆の時間の完全な無駄です。
Kraang Prime

@SanuelJackson GeckoFxは私の会社で完全に動作しており、ブラウザの設定で問題を引き起こしていません
Wayne

@ウェイン-それはあなたのためにいいです。これらのオープンプロジェクトはどれも、マネージコード、特にドロップインwinformsコントロールとして機能するために大幅な変更を必要とするドロップイン置換ではありません。それらは、IEコントロールが提供する機能を欠いている、または完全にs__tであり、常にクラッシュするか、遅いため、ここにすべての問題をリストすることもできません。おそらく、インターネットがWebブラウザーを必要としないもう1つの10年間で、おそらく何か実行可能な状態になるでしょう。
Kraang Prime、2015

@SanuelJacksonうーん、私はあなたが言ったことが真実であることを望みます。残念ながら、代替手段(GeckoFXを含む)のどれも、私にとって表示停止エラーはありませんでした。また、Essential Objectsブラウザーの高価格を回避できたらよかったのにと思います。しかし、私にとって完璧に機能したのはそれだけでした。
Maiken Roskilde

5

私はGeckoFXを使用しましたが、非常に効果的です。Firefoxエンジンを使用しています。私がこれまでに遭遇した唯一の警告は、ドキュメントが実際に完全にロードされる前に一度「DocumentLoaded」イベントを発行することです... HTMLがロードされたときに1つ、そしてすべての画像やものが読​​み込まれます。最初の1つを無視するだけで修正しましたが、今まで間違いなく美しく機能しています。

ここで見つけることができます:https : //bitbucket.org/geckofx/

ほとんどのまともなライブラリのように、それはオープンソースです。


2
機能するすべてのFirefoxベースのコンポーネントは、ユーザーがFirefoxをインストールするときにねじ込みます。幸いなことに、これらのソリューションのほとんどはまったく機能せず、運が良ければ、Firefoxの設定はそのまま維持されます---それほど幸運ではありません。すべての設定が失われ、ドロップインとしてのIEに勝るものはありません。
Kraang Prime

1
リンクは死んでいて、古いビルドからのものです。 bitbucket.org/geckofxの最新バージョン
Wayne

@Sanual Jackson-私は何年もGeckoFxを使用しており、ユーザー自身のFirefoxのインストールで問題が発生したことはありませんでした。推測しているだけですか?
PandaWood、2015年

3

MozNetは.NETコントロールであり、以前は多かれ少なかれ放棄されたGeckoFXコントロールに基づいていましたが、完全に開発中であり、GeckoFXがスティックを振るよりもはるかに多くの機能を備えています。あなたはでそれを見つけることができますセブンソフトのウェブサイト。


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コアAPI

.Netアプリケーションにさまざまなブラウザーがすべて必要ですか?Chrome、Firefox、Webkit、Internet Explorerをアプリケーションに統合できるBrowseEmAll Core API 。これは商用製品ですが、注意が必要です。

(完全な開示:私はこの会社で働いているので、私が言うすべてを塩の粒でとります)




1

最初はGeckofxとWebkit.netはどちらも有望でしたが、FirefoxとChromeはそれぞれ最新の状態ではありませんでしたが、Internet Explorerが改善されたため、Webブラウザーコントロールも改善されました。持っていますが、レジストリに移動してIE9に変更することで修正でき、HTML5を許可します。



0

私はそこにあるすべてのブラウザを試しました。残念ながら、すべての状況で本当にうまくいったのはEO.Browserだけでした。無料のソリューションを選択できたらよかったのですが、結局はEO.Browserになりました。それはかなり高価ですが、よく維持されます。


0

2016年更新:

私にとって、IEに代わる信頼性が高く維持されている唯一のブラウザーはEO.WebBrowserです。私は何日も何週間もかけて他の人を試しました。それらのすべてに、ある時点で私のためにショーを止めるいくつかの問題がありました。


1
ええと...私は一週間ぐらついていましたか?MS WebBrowserを機能させようとしている-まったく役に立たない。他の=:-{を試してみませんでした。ただし、初めて動作したEO.WebBrowserは除きます。そのため、EOと成功の場合は20分、MSの場合は5日間で、完全に名目上の失敗が発生します。私が今やらなければならないことは、「成功」を買うために750ドルを見つけることです!!!
リチャードハモンド

0

ここでWebKitXなどの商用製品を見てみる価値があるかもしれませんhttps : //www.webkitx.com

ここに画像の説明を入力してください

Chromium Embedded Frameworkを使用していますをし、Windows XP、7、8、10でHTML5、WebGL、PDFおよびFlashをレンダリングします。また、コントロールの32ビットおよび64ビットのフレーバーも提供します。

IE WebBrowserコントロールと同様のCOMオブジェクトを使用してDOMアクセスを提供します。

ここに画像の説明を入力してください

(evalを使用せずに)スカラー引数を渡す関数名でJavaScriptを呼び出すことができ、AngularのJavaScriptコールバックもあります

ここに画像の説明を入力してください

独自の相互運用可能なCOMオブジェクトをJavaScriptに追加できます。

ここに画像の説明を入力してください

HTML5ゲーム用のWebGL / WebAudioをサポートしていますが、Citrix環境では無効にすることができます。

ここに画像の説明を入力してください


私はプロダクションで使用し、完全に信頼しています。他にもいろいろ試してみましたが、このブラウザに行き詰まりました。開発者は本当に優秀で「個人的」です。他の多くの人のように一人でいるような気分にはなりませんでした。本当に良い、安定した製品。
tmighty

SOは免責事項を必要とするので、エリアスが彼がmobilekitXの作成者であるmobilefxのCTOであることを指摘できれば良かったでしょう
hko
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.