4

新しいWPFプロジェクトを作成し、それにAwesomium1.6.3WebControlを追加しました。

次に、このコードをに追加しました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」、次に「function(a、b){...}」を警告します。これは、私が考えている限り、故障していますが、それは別の問題です。

一番下のコードのコメントを外すとすぐに、「1」と警告してからハングします。なんで?ページ上のリンクに関する情報を入手するにはどうすればよいですか?または、いくつかの情報を確実にC#に返しますか?または、C#でDOMにアクセスしますか?

編集: jQuery jQuery1.7コードを含む単なる文字列です。

4

2 に答える 2

5

次の行がハングする理由について:

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

これは、ExecuteJavascriptWithResult基本的なJavascriptタイプ(文字列、数値、ブール値、配列、またはユーザーが作成したオブジェクト)のみを返すことができるためです。これらのタイプのいずれかにマップできないネイティブDOM要素オブジェクトを返そうとしたため、要求は失敗しました。

于 2011-11-11T05:41:27.787 に答える
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を含めると有利な場合があります。)

于 2015-12-05T16:04:15.670 に答える