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