WebViewのinvokeScriptではまったところ
.NETでWebアプリのクライアントアプリを作る場合、Windows.UI.Xaml.Controls.WebView を使ってスクレイピングをしたりするわけです。
その時、InvokeScriptAsyncを使ったりするわけです。
こいつは第1引数に呼び出すJavaScriptの関数を、第2引数にその関数に渡す実引数を配列で渡します。
なので、eval
関数を呼び出せば、任意のJavaScriptコードが実行できます。
var result = await webView.InvokeScriptAsync("eval", new[] { "'hogehoge'" }); Debug.Assert(result == "hogehoge");
が、このInvokeScriptAsyncはかなり癖のあるメソッドです。
まず第1に、関数に渡す実引数は文字列である必要があります。
そして、戻り値も文字列型である事を期待します。
さらに、戻り値が文字列型でない場合は勝手に空文字列が返ります。
var result = await webView.InvokeScriptAsync("eval", new[] { "[1, 2, 3]" }); Debug.Assert(result == "");
これはなかなかアレ気な仕様というかなんというか…。
スクレイピングに関連して.NETのJSONデシリアライザの話。
DataContractJsonSerializerが認識するJSONはかなり厳密です。
具体的には
などなど。
以上スクレイピングしようとして小1時間悩んでしまったところでした。
Gavia(ActiveRecor for IndexedDB) v0.1.0 リリース
半年以上前に作ったActiveRecordなIndexedDBライブラリをちょこちょこ手直ししてみました。
https://github.com/kokudori/gavia/
http://kokudori.github.io/gavia/
例によってbower install gavia
で入ります。
一番の変更点は今までjQueryDeferredを使うためにjQueryに依存してたんですが、 なんちゃってjQueryDeferredもどきを作ったので依存ライブラリが無くなりました。
やったー、といってもjQuery依存が消えることってそんな嬉しいかなー。 最近はJavaScriptもMVC系フレームワークが増えてきて(というか乱立しすぎ)、 以前ほどjQuery必須というわけでも無くなりましたが、まぁ、まだまだそんなことはなく。
BootstrapがjQeury依存というのがでかい気もしますがどうだろう。
ついでにずっと死んでたtravis-ciの自動テストもパスさせておいた。
travis-ci上のnpm install
が手持ちPCの何倍も早く済むのがこの作業を通しての最大の悲しみ。