Android:javaScriptに関する仕様変更

jQuery問題集のHTMLがAndroidに表示できるようになったので
jQueryとの連携のプログラムを書いていたのですが、is11tでは機能するのに
nexus7では機能しません…。
以前にjavaScriptとの連携で利用したサンプルでは機能しているのに…、
 

JavascriptInterfaceの仕様変更

調べるとセキュリティを考慮してAndroid4.2.2から仕様変更されたようです。
以下のサイトが詳しいです。
→参考:UB Lab.さま「Nexus 7(Android 4.2.2)で、JavascriptInterfaceが動かない
 
JavascriptInterfaceのセキュリティの問題は以前から問題視されていたようで
それに対応するための処置のようです。問題に関しては以下のサイトが詳しいです。
→参考:AndroidのWebView#addJavascriptInterfaceは基本使わない方がいい、っていう話
 

loadUrlも禁止に

javaScript→Androidの接続はできたので、続いてAndroid→javaScriptの接続に
はいりました。ここでも実機のNexus7で機能しません。
 
調べるとAndroid4.4ではloadUrlが利用できなくなっているようです。
→参考:WebView on Android 4.4 – Changing font using JavaScript
 
しかし、この方法を利用してもダメでした。というかNexus7のバージョンを確認したら
4.3だったので、これが原因ではないようです。
ここで悩んだのですがnuxus7のバージョンを4.4にしました。
にもかかわらずダメでした。
 

意外な結末

原因を調べるために、jQuery問題集での作業をやめて簡単なサンプルを作成しました
android側に配置したbuttonをクリックするとhtml側のjavaScriptを実行する
シンプルなサンプルです。
スクリーンショット 2014-04-24 16.44.52
 
そして、これは見事に機能しました!
ここでjavaScript→Androidの直後にAndroid→javaScriptを実行すると
通信に失敗するのかな?と考えました。
 
しかし、ここで気が付いたのです。iOSではjavaScriptからiOSのメソッドが実行
できないからjavaScript→Androidの直後にAndroid→javaScriptを利用していた
だけで。直接メソッドが実行できるAndroidなら返値を貰うだけでよいのではないか!
 
ということで通信が失敗する理由は分かりませんが、問題は解決しました。
この問題が今後に響きそうなら原因を追及するのですが、こんなイレギュラーなiOS
向けの処理はAndroidに必要ないので究明はやめました。
 

Android4.xでのloadUrl

しかし関係有りそうな記事も見つかったのでメモ。
Android4.xではloadUrlでパラメータが渡せなくなっているようです。
私がダメだったサンプルではjavaScriptを直接実行して引数を渡しているので、
まったく同じ分けではないのですが…。
→参考:Android4.0のWebviewでURLパラメータが渡せない件について
 

Android4.4のWebView

Android4.4のWebViewは色々変更されているようです。以下のサイトが詳しいです。
→参考:Migrating_to_WebView_in_Android_4.4.md
 

touchcancelの追加

nexus7の実機でボタンをドラッグするようにタップするとONになったまま
になる現象に出会いました。機能的には問題ないからスルーしようかとも思った
のですが、上記の問題を調べている途中に原因が分かりました。
以下のサイトにある「touch end」だけでなく「touch cancel」でもOFFに戻す
ようにしました。この仕様変更によりリスト画面のようにボタンがたくさん配置されている
ところでスクロールさせる時、ボタンの表示がONになってしまうのを避けることができます。
しかしタップの際、すこしドラッグが入ってしまうクセのある方は、タップがキャンセル
されてしまうことがあります。個人的には昔の仕様の方が好きです。
→参考:Handling Touch Events in JavaScript
 
 
 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


+ 七 = 8


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>