3

次のことを実行できる.NETライブラリ/コンポーネントを探しています。

  1. Webページをロードする
  2. リンクされたJSを実行する
  3. ページのスコープで自分のJSを実行し、実行結果を返します。これは、複雑なオブジェクトまたはオブジェクトの配列である可能性があります。

私がこれまでに見つけた唯一の解決策はWebBrowserオブジェクトを使用することですが、すべてを機能させるにはボイラープレートコードのかなりのチャンクが必要であり、オブジェクトの配列では機能しません。次のコードサンプルでは、​​RuntimeBinderExceptionを受け取りますdynamic val = o.a;

class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        var t = new System.Threading.Thread(BrowserThread);
        t.SetApartmentState(System.Threading.ApartmentState.STA);
        t.Start();

        Console.ReadLine();
    }

    private static void BrowserThread()
    {
        var wb = new WebBrowser();
        wb.Navigate("http://google.com");
        wb.DocumentCompleted += (sender, args) =>
            {
                var head = wb.Document.GetElementsByTagName("head")[0];
                var script = wb.Document.CreateElement("script");
                dynamic el = script.DomElement;
                el.text = "function test(){return [{a:2},{a:2},{a:2}]}";
                head.AppendChild(script);
                dynamic result = wb.Document.InvokeScript("test");
                dynamic o = result.pop();
                dynamic val = o.a;
            };
        Application.Run();
    }
}

誰かが代替ソリューションを提供したり、これを修正するのを手伝ったりできますか?

4

1 に答える 1

2

あなたはそれが役立つかどうかdynamic a = o[0].a;試してみることができます...dynamic a = result[0].a;

別のポイント:resultコードをステップスルーしてタイプを確認する必要があります...これは実用的な答えを見つけるのに役立つかもしれません...

代替案に関しては、いくつかのオプションがあります。

  • WebKit.Net(無料)

  • Awesomium
    Chrome / WebKitをベースにしており、チャームのように機能します。無料のライセンスが利用可能ですが、商用のライセンスもあり、必要に応じてソースコードを購入できます:-)

  • WatiN(これも無料)

于 2012-12-18T22:09:26.063 に答える