2017-06-27 40 views
0

我意识到一个将HTML文件加载到WebView的Android程序,该HTML文件加载Leaflet.js,该文件根据您提供的提供程序显示不同样式的地图。在WebView中加载HTML文件后执行JavaScript指令

我在OnCreate()方法加载页面指令:

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

在那之后,我需要采取不同的地图列表由一个处理程序(与类名JavascriptInterface.java),我加入的WebView这样的:

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

最终的代码需要看起来像这样:

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

问题是第一个loadUrl()速度不够快,所以第二个loadUrl会在映射初始化之前进行,导致很多问题。

临时,也太可怕了,解决方案,我发现是举行第二使用loadURL 1秒钟执行前,像这样:

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

谢谢您的回答! –