iOSでガワネイティブで、WebViewで動かしてるJavaScriptからSwiftにURLのパラメータに乗せてデータを渡すことができたが、普通URLの長さには制限があるので、もっとでかいデータを渡す場合には違う方法をとる必要がある。
JSからネイティブにでかいデータを受け渡す方法
URLパラメータじゃなく、POSTで送ればある程度のサイズの制限は回避できる。JSからPOSTを送るには例によってAjaxを使う:
// test.js |
- 受け渡すデータは
a=x&b=y&...
という形式でなくても、改行などを含んでいても受け渡すことができる
SwiftでPOSTデータを受け取る
iOSガワネイティブでSwiftから値を受け取ると同様に、NSURLProtocolを継承して拡張したクラスを定義して、所定のURLをフックしてPOSTのデータを受け取る:
// MyURLProtocol.swift |
- 注意点として、POSTを受け取るURLのスキームは
http
かhttps
である必要がある。これを自分で独自に定義したスキームを使うとrequest.HTTPBody
がnil
になってしまい、受け取れない。