在 WebView 中加载 HTML 文件后执行 JavaScript 指令
Executing JavaScript instructions after loading HTML file in a WebView
我实现了一个将 HTML 文件加载到 WebView 中的 Android 程序,HTML 文件加载 Leaflet.js 显示基于提供者的不同样式的地图你给了。
我使用以下指令在 OnCreate() 方法中加载页面:
myWebView.loadUrl("file:///android_asset/test.html");
之后,我需要从我添加到 WebView 的处理程序(具有 class 名称 JavascriptInterface.java)中获取不同地图的列表,如下所示:
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,但有可能我没有很好地实现它。
请致电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");
我实现了一个将 HTML 文件加载到 WebView 中的 Android 程序,HTML 文件加载 Leaflet.js 显示基于提供者的不同样式的地图你给了。
我使用以下指令在 OnCreate() 方法中加载页面:
myWebView.loadUrl("file:///android_asset/test.html");
之后,我需要从我添加到 WebView 的处理程序(具有 class 名称 JavascriptInterface.java)中获取不同地图的列表,如下所示:
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,但有可能我没有很好地实现它。
请致电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");