LoginSignup
11
12

More than 5 years have passed since last update.

[WebViewシリーズ②] WebView内でJavaScriptのメソッドを操作する

Last updated at Posted at 2016-07-23

はじめに

[WebViewシリーズ①] WebViewのイベントをフックするの続編です。

前回は、WebViewからネイティブアプリを操作しましたが、
今回は、ネイティブアプリからWebViewを操作する方法をご紹介します。

やること

下記パターンのJavaScriptメソッドを呼ぶ方法について

① 引数なし、戻り値なし
② 引数あり、戻り値なし
③ 引数あり、戻り値あり
④ 引数あり、戻り値あり(JSON形式)

やらないこと

・WebViewの表示方法について
・JavaScriptについて

実装例

  1. WebViewに操作したいJavaScriptのメソッドが定義されているhtmlファイルを表示する
  2. JavaScriptを操作する(stringByEvaluatingJavaScriptFromString)

1については、割愛します。
以下に、2について順にご紹介します。

1. 引数なし、戻り値なし

JS
    function pokemonGo() {
        // do something
    }
Swift
    webView.stringByEvaluatingJavaScriptFromString("window.pokemonGo();")

2. 引数あり、戻り値なし

JS
    function moveToLocation(lat, lng) {
        // 位置情報の偽装はいけません。
    }
Swift
    let lat = 139.7
    let lng = 35.6
    webView.stringByEvaluatingJavaScriptFromString("window.moveToLocation('\(lat)', '\(lng)');")

3. 引数あり、戻り値あり

JS
    function getMonster() {
        return "pokemon"
    }
Swift
    if let name = webView.stringByEvaluatingJavaScriptFromString("window.getMonster();") {
        print(name)
    }

4. 引数あり、戻り値あり(JSON形式)

JS
    function getMonsterInfo() {
      return { "name":"フシギダネ", "number":1 };
    }
Swift
    if let monsterInfoStr = webView.stringByEvaluatingJavaScriptFromString("JSON.stringify(window.getMonsterInfo());") {

        if let monsterInfoData = monsterInfoStr.dataUsingEncoding(NSUTF8StringEncoding) {

            do {
                let monsterInfoJson = try NSJSONSerialization.JSONObjectWithData(monsterInfoData,
                                                                             options: NSJSONReadingOptions.MutableContainers)
                print(monsterInfoJson);
            } catch let error as NSError {
                print(error.description)
            }
        }
    }

まとめ

WebView内でJavaScriptのメソッドを操作するには、下記の2ステップが必要です。

  1. WebViewに操作したいJavaScriptのメソッドが定義されているhtmlファイルを表示する
  2. JavaScriptを操作する(stringByEvaluatingJavaScriptFromString)

こちらも合わせて読んでください♥

[WebViewシリーズ①] WebViewのイベントをフックする
[WebViewシリーズ②] WebView内でJavaScriptのメソッドを操作する
[WebViewシリーズ③] WebViewは、ページ内のアンカーへリンクできない??
[WebViewシリーズ④] WebView(アプリ内)のリンクからiTunesが表示できない

ゆるふわにUIWebViewでJavaScriptイベントをひろってみる

誤り等ございましたら、ご指摘頂ければ幸いです。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12