2017-06-27 29 views
0

HTMLファイルをWebViewに読み込むAndroidプログラムを実現しました.HTMLファイルは、提供したプロバイダに基づいて異なるスタイルのマップを表示するLeaflet.jsを読み込みます。WebViewにHTMLファイルをロードした後でJavaScriptを実行する

私はこの命令でのOnCreate()メソッドでページを読み込む:

myWebView.loadUrl("file:///android_asset/test.html"); 

その後、私は(クラス名JavascriptInterface.java付き)ハンドラから別のマップのリストを取る必要があり、そのIこのようなWebViewのに追加:

myWebView.addJavascriptInterface(new JavaScriptInterface(this, myWebView), "MyHandler"); 

最終的なコードは次のようになりする必要があります:

myWebView.loadUrl("file:///android_asset/test.html"); 
myWebView.loadUrl("javascript:window.MyHandler.getMaps()"); 

問題は、最初のloadUrl()が十分速くないため、mapが初期化される前に2番目のloadUrlが移動し、多くの問題が発生することです。

私が見つけた、一時的な、そしてまた恐ろしいソリューションは、このように、それを実行する前に1秒のための第二loadUrlを保持することである。

myWebView.loadUrl("file:///android_asset/test.html"); 

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
     // Actions to do after 1 second 
     myWebView.loadUrl("javascript:window.MyHandler.getMaps()"); 
    } 
}, 1000); 

別のものの後の命令を実行する良い方法があります?私は既にASyncTaskを使ってみましたが、それをうまく実装していない可能性があります。

答えて

0

myWebView.loadUrl( "javascript:window.MyHandler.getMaps()")を呼び出してください。内部Webview onPageFinishedイベント。

 myWebView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 
       Log.d("WebView", "onPageStarted " + url); 
      } 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       myWebView.loadUrl("javascript:window.MyHandler.getMaps()"); 
      } 
     }); 
    myWebView.loadUrl("file:///android_asset/test.html"); 
+0

ありがとうございました! –

関連する問題