AndroidのWebViewとHTMLのJavaScriptの対話も話します.
2726 ワード
この二日間ずっと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(')+strHtml+'」) 方式二:
//Javaコードにjavascriptのインターフェースを追加してファイルからjavaのオブジェクトを呼び出します. webView.addJavascript Interface(straHtml) 「MyContent」) HTMLファイル
html PUBLIC 「-/W 3 C/DMD」 HTML 4.01 Transitional/EN" 「http://www.w3.org/TR/html4/loose.dtd">><> <ヘッド> ヘッド> body> <スクリプト> Funion pussh NewsDate(data Text){Dcument.write(data Text);} window.MyContent; スクリプト> html 最後に私が使っているのはサーバーから得られたデータを表示する第二の方法です.なぜ最初の方法ではないかという友達がいるかもしれませんが、このように直接呼び出してもいいじゃないですか?どうして回り道をしなければならないのですか?まずWebViewにお願いを送ります.そしてWebViewからデータを送ります.最初に、私も第一の方法は直感的で、使うのも手っ取り早いと思いましたが、デバッグの過程でこのような呼び方は隠れている危険があります.これはhtmlページにサーバーから受信したデータを転送するためです.この中には制御しにくいところがあります.サーバー側から送信されたデータはどのようなものですか?中には不法な文字がありますか?特殊文字がありますか?この潜在的な危険を発見したのも偶然です.前に表示されたのは正常ですが、突然に何も表示されない状況が現れました.debugの時には、すべてのところを追跡しました.コードに問題があることにも気づきませんでした.最後にサーバーから受信したデータをHTMLページに入れて、JavaScriptに対してdebugを作りました.このように3時間以上繰り返しました.最後に、使用方法を得ると、データをパラメータとしてjavascript関数に導入したとき、javascriptはパラメータの取得値を認識しないことによって、javascriptは着信パラメータの値が間違っていると考えています.第二の方式に変えたら、この問題は存在しなくなります.どんなデータでもhtmlページで正常に表示できます.第二の方法では、私は一つの文字列「strHtml」を対象として、これまでのページに入ってきました.もし他の内容が入ってほしいなら、例えば、クラスに入ってきてもいいです.
public クラス 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での呼び出しは以下の通りです.
html PUBLIC 「-/W 3 C/DMD」 HTML 4.01 Transitional/EN" 「http://www.w3.org/TR/html4/loose.dtd">><> <ヘッド> ヘッド> body> <スクリプト> window.MyContent.get Content() スクリプト> html
転載先:https://blog.51cto.com/jerrysun/560891
方式一:
//先にhtmlファイルをロードして、それからhtmlファイルのjavascript関数を呼び出します. webView.loadUrl("file:///android_asset/show.html"); webView.loadUrl(「javascript:pussh Newsdata(')+strHtml+'」) 方式二:
//Javaコードにjavascriptのインターフェースを追加してファイルからjavaのオブジェクトを呼び出します.
html PUBLIC 「-/W 3 C/DMD」 HTML 4.01 Transitional/EN" 「http://www.w3.org/TR/html4/loose.dtd">>
public クラス Html Show{
html PUBLIC 「-/W 3 C/DMD」 HTML 4.01 Transitional/EN" 「http://www.w3.org/TR/html4/loose.dtd">>
転載先:https://blog.51cto.com/jerrysun/560891