AndroidにおけるWebViewとJavaScriptの相互作用の2つの方法
2898 ワード
この二日間ずっとWebViewでファイルをロードして、サーバー側のデータの問題を表示しています.その中の重要な問題はjavaコードでサーバー側から受信したデータをWebViewのHTMLページに伝達し、JavaScript関数を通じてデータを表示することです.AndroidのAPI文書を調べたところ、WebViewはJavaScriptと対話できる2つの方法があることが分かりました.
方式一://先にhtmlファイルをロードして、それからhtmlファイルの中のjavascript関数を呼び出します. webView.loadUrl("file:///android_asset/show.html"); webView.loadUrl(「javascript:pussh Newsdata」+「'」) 方式二://Javaコードにjavascriptのインターフェースを追加し、htmlファイルからjavaのオブジェクトを呼び出します. webView.addJavascript Interface(straHtml) 「MyContent」) HTMLファイル > <> <ヘッド> <スクリプト> funcion pussh NewsDate(data Text){ . document.write(data Text); } window.MyContent; 最後に私が使っているのはサーバーから得られたデータを表示する第二の方法です.なぜ最初の方法ではないかという友達がいるかもしれませんが、このように直接呼び出してもいいじゃないですか?どうして回り道をしなければならないのですか?まずWebViewにお願いを送ります.そしてWebViewからデータを送ります.最初に、私も第一の方法は直感的で、使うのも手っ取り早いと思いましたが、デバッグの過程でこのような呼び方は隠れている危険があります.これはhtmlページにサーバーから受信したデータを転送するためです.この中には制御しにくいところがあります.サーバー側から送信されたデータはどのようなものですか?中には不法な文字がありますか?特殊文字がありますか?この潜在的な危険を発見したのも偶然です.前に表示されたのは正常ですが、突然に何も表示されない状況が現れました.debugの時には、すべてのところを追跡しました.コードに問題があることにも気づきませんでした.最後にサーバーから受信したデータをHTMLページに入れて、JavaScriptに対してdebugを作りました.このように3時間以上繰り返しました.最後に、使用方法1の場合、データをパラメータとしてjavascript関数に導入した場合、javascriptはパラメータの値を認識しないことによって、javascriptは着信パラメータの値が間違っていると考えています.第二の方式に変えたら、この問題は存在しなくなります.どんなデータでもhtmlページで正常に表示できます.第二の方法では、私は一つの文字列「strHtml」を対象として、これまでのページに入ってきました.もし他の内容が入ってほしいなら、例えば、クラスに入ってきてもいいです. pblic クラス Html Show{ prvate String str public String get Conttent(){ str = 「initialize in java"; return str } } HtmlShow hs. = new Html Show() webView.addJavascript Interface(hs、 「MyContent」) Htmlでの呼び出しは以下の通りです.> <> <ヘッド> <スクリプト> window.MyContent.get Content() この記事は「C#を徘徊し、java、phpの間に」というブログから来ました.http://jerrysun.blog.51cto.com/745955/560891
方式一: