javascript - 在 WebView 中加载 HTML 文件后执行 JavaScript 指令

标签 javascript android html webview handler

我实现了一个 Android 程序,它将 HTML 文件加载到 WebView 中,HTML 文件加载 Leaflet.js,根据您提供的提供程序显示不同样式的 map 。

我使用以下指令在 OnCreate() 方法中加载页面:

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

之后,我需要从添加到 WebView 的处理程序(类名为 JavascriptInterface.java)获取不同映射的列表,如下所示:

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

最终的代码需要如下所示:

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

问题在于第一个 loadUrl() 不够快,因此第二个 loadUrl 在 map 初始化之前就进入,导致很多问题。

我发现的临时且可怕的解决方案是在执行第二个 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");

关于javascript - 在 WebView 中加载 HTML 文件后执行 JavaScript 指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44775351/

相关文章:

javascript - 在 Javascript 中转换对象格式

android - 如何在 recyclerview 项目点击时取消选择所有其他位置值?

android - 使用显式与隐式 Intent 启动 android 服务

javascript - 基于 SVG 的 UI 是可用的和/或可行的选项吗?

html - 媒体查询 - 堆叠内容

javascript - 应该在 Controller 上定义关闭 Action

javascript - 完全加载外部 html 文件的问题

javascript - 如何使用javascript ajax获取跨域的页面源

android - 如何使用 url 查询 android 的远程数据库?

javascript - onload 方法返回值并分配给变量