2016-03-30 60 views
0

新しいプロセスでメソッド(LoadUrl)を実行する方法を教えてください。 問題は、CefSharp(https://cefsharp.github.io)が1回だけ初期化されているため、元に戻すことができないということです。次の要求で "User-Agent"を選択します。新しいプロセスのCefSharp

私はこれを新しいスレッドで試してみましたが、試してみると、Cef.ShutDown()の後にクラッシュします。Cef.Initialize()

新しいコマンドラインで毎回CefSharpを起動する方法はありますか?

マイコード:

public void LoadUrl() 
{ 
    Cef.Initialize(InitializeCef()); 
    CefSharp.OffScreen.ChromiumWebBrowser browser = new CefSharp.OffScreen.ChromiumWebBrowser("", BrowserSettings()); 
    string URL = "http://localhost:3180/"; 

    browser.Size = new System.Drawing.Size(800, 600); 
    browser.LoadError += (BrowserLoadError); 
    browser.JsDialogHandler = new JsDialogHandler(); 
    browser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(browser_FrameLoadEnd); 
    while (!browser.IsBrowserInitialized) 
    { 
     Console.WriteLine("Initializing browser..."); 
    } 
    browser.Load(URL); 

    browser.Dispose(); 
    Cef.Shutdown(); 
} 
private BrowserSettings UniBrowserSettings() 
{ 
    BrowserSettings settings = new BrowserSettings(); 
    settings.DefaultEncoding = "UTF-8"; 
    settings.JavascriptAccessClipboard = CefState.Disabled; 
    settings.JavascriptOpenWindows = CefState.Disabled; 
    settings.JavascriptCloseWindows = CefState.Disabled; 
    settings.JavascriptDomPaste = CefState.Disabled; 
    settings.OffScreenTransparentBackground = true; 

    return settings; 
} 


private static CefSettings InitializeCef() 
{ 
    CefSettings settings = new CefSettings(); 
    settings.UserAgent = DateTime.Now + DateTime.Now.ToString() + " myBrowser " + Cef.CefSharpVersion; 
    return settings; 
} 

答えて

0

はCefSharpは一度、私の知る限り、あなたがシャットダウンした後、それを再初期化することはできません知っているように初期化するように設計されています。 UserAgentがCefSettings.hに格納されたプロパティで、実行中にChromeがユーザーエージェントを切り替えるように見えるため、ユーザーエージェントを設定できない理由がわかりません。

あなたの代わりに、ユーザーエージェントをコマンドライン引数として使用する別のプロジェクトを作成することができます。そのプロセスはブラウザを作成し、作業を行い、終了します。このような何か:あなたはまた、おそらくあなたがUri.TryCreateを使用して検証することができ、あなたはそれで作業することができるはずパラメータとしてURLを渡す

class Program 
    { 
     static void Main(string[] args) 
     { 
      if(args.Length > 0 && !String.isNullOrEmpty(args[0]); 
       Cef.Initialize(new CefSettings() { UserAgent = args[0] }); 
     } 
    } 

+0

これは「Chromium」の制限です。https://bitbucket.org/chromiumembedded/cef/issues/421#comment-16410312 – amaitland

+0

@emitland私はCefSharpの実際の初期化には多くのことを考えましたが、なぜそうではないでしょうかCefが初期化されたらUserAgentを変更することは可能ですか?財産権にゲッターとセッターがあるようです。 **編集**私は投稿に書いたことを理解していますが、今編集してもまだUserAgentについて興味があります – Matt

+0

しかし、私は送りたいだけでなく、データも受け取りたいです。そのような接続エラーなど... –

関連する問題