.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

スマホネイティブから、ウェブコンテンツを表示するときに使用するコンポーネント。

Android

Android WebView

  • Androidアプリでウェブコンテンツを表示するときに使用できる。
  • Chromeの技術を使用したシステムコンポーネントである。
    • コンポーネントは端末にプリインストールされている。
    • 最新の状態に維持される(セキュリティアップデートやその他のバグ修正を反映)。

WebView

簡易ブラウザ開発

プロキシ

その他

iOS

Android WebViewには、

というWebViewがある模様。

iOSのバージョンアップに従って機能が変更されている模様。

WebView

簡易ブラウザ開発

プロキシ

その他

デバッグ

Android

iOS

ハイブリッド開発

HTMLコンテンツから、JavaScriptを経由して、スマホネイティブのデバイスへアクセスする。

参考

  • 書籍転載:[iOS/Android対応]HTML5ハイブリッドアプリ開発[実践]入門

HTML→(JavaScript)→スマホネイティブ

スマホネイティブ→(JavaScript)→HTML

HTML→(JavaScript)→スマホネイティブの処理方式

onJsAlert?方式

  • 対応デバイス
    • Androidのみ
  • 処理方式
    • window.alert()に渡された文字列をWebChromeClient?のonJsAlert?()で補足するハックを使用。
    • result.confirm()で全てのwindow.alert()が抑止されるので・・・。

addJavascriptInterface?方式

  • 対応デバイス
    • Androidのみ
  • 処理方式
    • JavascriptにJavaのInterfaceを公開する。
  • 脆弱性がある。
    • HTTP/HTTPSのアクセスだけ許容する。
    • shouldOverrideUrlLoading?でURLチェックを行なう。
    • Android 4.2 Jelly Bean以降、公開するAPIを
      @JavascriptInterface?アノテーションで指定可能になった。

Loopback Interface Redirection方式

  • 対応デバイス
    • Android and iOSをサポート
  • 処理方式
    • ローカル・ループバックでWebAPI連携
      (ローカルに、WebAPIの実行環境の構築が必要)

Private-Use URI Scheme Redirection方式

  • HTML:location.hrefで「apicall://」等、Private-Use URL Schemeを使用して呼び出す。
  • Android:上記の呼び出しを、
    • shouldOverrideUrlLoading?()メソッドで補足する。
  • iOS :上記の呼び出しを、
    • shouldStartLoadWithRequest?()メソッド(UIWebViewDelegate?プロトコルを実装)で補足する。
    • NSURLProtocol.canInitWithRequest?()メソッドで補足する。

スマホネイティブ→(JavaScript)→HTMLの処理方式

ネイティブ側からJavaScriptを実行し、JavaScriptのグローバル変数に値を代入する。

JSONライブラリ

Objectは渡せないので、JSONライブラリを用いて文字列にParseする。

Android

ネイティブ側からJavaScriptを実行する方法は、
loadUrlメソッドにjavascriptスキームのURLを読み込ませる。

webView.loadUrl("javascript:window.objectFromNative=" + new JSONObject().toString());

Android 4.4 (KitKat) でjavascriptを実行する場合、webview.loadUrlからwebview.evaluateJavascriptへ変更する必要がある。

iOS

ネイティブ側からJavaScriptを実行する方法は、
stringByEvaluatingJavaScriptFromString?メソッドを実行する。

  • 引数として渡したJavaScriptが実行される。
  • その評価したJavaScriptのコードの返り値を取得できる。
[webView evaluateJavaScript: @"window.objectFromNative = 'foobarvalue';"];

セキュリティ

Android

WebView#addJavascriptInterface?(Android)

WebView#addJavascriptInterface?は危険。

iOS

バージョン間の差異

Android

Android 4.4 (KitKat?)での変更が大きかった模様。

Migrating to WebView in Android 4.4 (KitKat?)

JavaScriptの実行

https://gist.github.com/seamountain/7415057#multi-threading-and-thread-blocking

  • Android 4.4 (KitKat?) でjavascriptを実行する場合、
    webview.loadUrlからwebview.evaluateJavascriptへ変更する必要があるのだが、
  • この理由は、「webview.loadUrlだと、JavaScript のCallbackを待つのに、
    UIスレッドをブロックするしか無いため。」と書かれている。
    • Callbackを持つevaluateJavascriptに変更する。
    • loadUrlメソッドではJavaScriptスキームを実行できなくなっている。

Signature

  • WebViewClient?
    • public void onReceivedError?
      • onReceivedError?(WebView view, int errorCode, String description, String failingUrl)
      • onReceivedError?(WebView view, WebResourceRequest? request, WebResourceError? error)
  • public boolean shouldOverrideUrlLoading?
    • shouldOverrideUrlLoading?(WebView view, String url)
    • shouldOverrideUrlLoading?(WebView view, WebResourceRequest? request)

iOS

???


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-03-17 (土) 19:09:40 (404d)