2011-11-11 8 views
4

新しいWPFプロジェクトを作成し、Awesomium 1.6.3 WebControlを追加しました。Awesomiumを使用してJavaScript結果をC#に戻すには?

そして、私はMainWindow.xaml.csにこのコードを追加:

private void webControl1_Loaded(object sender, RoutedEventArgs e) 
    { 
     webControl1.LoadURL("https://www.google.com/"); 
    } 

    private void webControl1_DomReady(object sender, EventArgs e) 
    { 
     var wc = new WebClient(); 
     webControl1.ExecuteJavascript(jQuery); 
     webControl1.ExecuteJavascript(@"var __jq = jQuery.noConflict();"); 
     webControl1.ExecuteJavascript(@"alert(__jq);"); 
     using(var result = webControl1.ExecuteJavascriptWithResult(@"(function() { return 1; })();")) 
     { 
      MessageBox.Show(result.ToString()); 
     } 
     //using (var result = webControl1.ExecuteJavascriptWithResult(@"(function() { return __jq('a'); })();")) 
     //{ 
     // MessageBox.Show(result.ToString()); 
     //} 
    } 

をそして、それは "1" を警告した後、故障している "関数(B){...}"、今で私はそれについて考えますが、それは別の問題です。

ボトムコードのコメントを外すと、すぐに「1」が通知されてハングアップします。どうして?ページ上のリンクに関する情報はどのようにすることができますか?または、確実にC#に情報を渡しますか?または、C#でDOMにアクセスできますか?

編集:jQueryは、jQuery 1.7コードを含む文字列です。次の行がハングアップする理由について

答えて

5

ExecuteJavascriptWithResultは、基本的なJavascriptの種類(文字列、数値、ブール値、配列、またはユーザが作成したオブジェクトのいずれか)を返すことができるので、

webControl1.ExecuteJavascriptWithResult(@"(function() { return __jq('a'); })();") 

です。これらの型のいずれにもマッピングできないネイティブDOM要素オブジェクトを返そうとするため、要求は失敗します。

+0

、それは非常に少なくとも説明と例外をスローした場合はいいだろう。私はまだ私が望むプロパティを選んで、それらを私が推測する文字列として返すことができると思います。ご協力いただきありがとうございます! – mpen

+0

また、ユーザー作成オブジェクトとは何ですか?また、jQueryオブジェクトとの違いは何ですか? – mpen

+1

バグです。すぐにnullが返されるはずです。私はto doリストに追加します。 – Adam

1

複雑なオブジェクトを返す簡単な方法は、JSON.stringify()を使用して文字列に変換し、次にC#のマネージコードで解析することです。例えば

JSValue rawToken = browser.ExecuteJavascriptWithResult(@"JSON.stringify(someTokenObjectHere);"); 
if (rawToken.IsString) 
{ 
    // For generic objects: 
    JObject payload = JObject.Parse(rawToken.ToString()); 
    // For typed objects: 
    MyCustomTokenObject payload = JsonConvert.DeserializeObject<MyCustomTokenObject>(rawToken.ToString()); 
} 

(シリアル化のためのものNewtonsoft.Jsonを含むことが有利であり得る。)

関連する問題