繁体   English   中英

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

[英]Executing JavaScript instructions after loading HTML file in a WebView

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

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

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

之后,我需要从Handler(带有类名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,但有可能我没有很好地实现它。

请调用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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM