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