2017-02-09 131 views
1

私はChromiumWebBrowserコントロールといくつかの基本的なウィンドウコントロールを持つwinformsアプリケーションを持っています。私は、ボタンをクリックし、JavaScriptを呼び出してブラウザ内のテキストボックスの値を取得し、返された値をwinformsアプリケーションのテキストボックスにコピーしたいと考えています。ここに私のコードです:JavaScriptを使用してCefSharpブラウザからテキストボックス値を取得する

string script = "(function() {return document.getElementById('Email');})();"; 

string returnValue = ""; 

var task = browser.EvaluateScriptAsync(script, new { }); 

await task.ContinueWith(t => 
    { 
     if (!t.IsFaulted) 
     { 
      var response = t.Result; 
      if (response.Success && response.Result != null) 
      { 
       returnValue = (string)response.Result; 
      } 
     } 
    }); 

txtTarget.Text = returnValue; 

しかし、戻ってきた結果はちょうど "{}"です。私は同じWebページをChromeに読み込み、開発ツールで同じjavascriptを実行して、期待どおりのテキストボックス値を取得します。

私が見たデモでは、単に "return 1 + 1;"というサンプルコードがありましたが、試してみると "{}"の代わりに "2"という値が返されていました。面白いことに、私が試したとき

string script = "(function() {return 'hello';})()"; 

これは文字列ではうまくいきませんが、私はまだ "{}"を得ていました。

私はしばらくこの頭を掻いてきましたが、これを解決する方法を見つけ出すことができませんでした。私は非常に基本的な構文エラーをしているのですか、それとももっと複雑なことがありますか?

+0

スクリプトを実行するのが早すぎる可能性があります。詳しくは、一般的な使用方法のガイドをご覧ください。 – amaitland

+0

ボタンがクリックされたときにスクリプトが実行されるので、私が望むだけ待つことができれば、ページを読み込めないという意味はありません – jardantuan

答えて

3

だから私は、私はそれを考え出したと思う:

string script = "(function() {return document.getElementById('Email').value;})();"; 
string returnValue = ""; 

var task = browser.EvaluateScriptAsync(script); 

await task.ContinueWith(t => 
{ 
    if (!t.IsFaulted) 
    { 
     var response = t.Result; 

     if (response.Success && response.Result != null) 
     { 
      returnValue = response.Result.ToString(); 
     } 
    } 
}); 

txtTarget.Text = returnValue; 

がEvaluateScriptAsyncから引数オブジェクトを削除するには、問題を解決するように見えました。問題が何だったのかわかりません - おそらく、パラメータを取るべきでないときに空のargsオブジェクトでjavascript関数を実行しようとしていましたか?

いずれにしても、解決しました。

関連する問題