UIWebViewでサブミットされたフォームの値を取りたいな
という欲望は皆抱えておらんのか、英語情報しかないぞ。グーグル先生に「フォーム」って書いてもご丁寧に「Form」って翻訳して見つけてくれるぞ。俺は寂しい。
リンクのクリックをひっかけてのあれこれは、UIWebViewDelegateでwebView:shouldStartLoadWithRequestでサンプルが結構あるんだが、フォームのサブミットも基本これでフックするしかないようだ。
その引数のrequestの中にキーバリューでフォームデータが入ってるもんだとばかり思ったのだがどうも違うらしい。
で、ぐぐった訳だが見つけたその英語情報というのも、
- GETにして[[request URL]absoluteString]で取って自分でパースしたった
- http://www.iphonedevsdk.com/forum/iphone-sdk-development/71285-post-data-form-uiwebview-back-app.html
そりゃ英語圏の選ばれし者共の方々はよいでしょうよ、まだ。
で結局スポルスキー大先生のお作りになられたあそこのお世話になりもうした。
- ユー、stringByEvaluatingJavaScriptFromStringでフォームの値を取っちゃいなよ
- http://stackoverflow.com/questions/2531138/iphone-uiwebview-form
つまり、UIWebViewに読み込んだHTMLに
<form name="myForm" method="POST"> <input type="hidden" name="hoge" /> (略) </form>
とあった場合、Objective-C側で、webView:shouldStartLoadWithRequestの中で
NSString* hoge = [webView stringByEvaluatingJavaScriptFromString:@"document.myForm.hoge.value"];
ってすりゃよいではないかという。
できた…。そりゃ出来るよそりゃ。だがしかし、釈然としない。だがしかし、要件は満たせた。だがしかし、このソースの分散しっぷりにだがしかしであった。まあよい。