Android WebView + loadUrl与javascript + onPageFinished =滞后

时间:2011-04-28 14:31:03

标签: javascript android webview

我有WebView加载一些页面,当它完成时我应用一些javascript魔法来搞乱DOM。一切都很好,页面加载和onPageFinished我只需拨打wv.loadUrl(javascript);

但我不想看到加载过程,以及javascript是如何工作的,我只需要结果,所以我从一开始就用wv.setVisibility(View.INVISIBLE);使我的视图不可见,并在完成所有操作后再次显示。这就是问题发生的地方。

这段代码应该在javascript完成后使视图可见,但wv.setVisibility(View.VISIBLE)在javascript之前触发。所以有一会儿我看到了页面以及如何通过javascript更改它。这太丑了。

  public void onPageFinished (WebView view, String url) {
         wv.loadUrl(javascript);
         view.getSettings().setLoadsImagesAutomatically(true);
         wv.setVisibility(View.VISIBLE);

    }

我知道loadUrl是异步工作的,所以我尝试在onPageFinished中使用“make first view visible”方法创建另一个WebViewClient,并用它来调用JS。但它只是随着NPE错误而崩溃。

wv2.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished (WebView view, String url) {
     wv.setVisibility(View.VISIBLE);
}
});

现在我刚刚在javascript(SystemClock.sleep(5000))之后添加了延迟,但这就像......是的。

2 个答案:

答案 0 :(得分:1)

好的,我想我已经明白了。我们可以从javascript的结尾回调一下“show view” - 如herehere(带处理程序,因为我想更新ui)。 但它不会改变任何东西,问题似乎在于渲染速度。这很慢。所以现在我将在解雇JS后坚持1秒延迟。

答案 1 :(得分:0)

我认为你不会轻易解决这个问题。 Android可以检测到的所有内容(如大多数浏览器)都是在页面完全加载时,这意味着所有内容都已下载。 Javascript等待它也被下载,然后开始运行。这就是它的工作方式。我能想到的唯一解决方案可能只是在JQuery中。我对此并不了解,但通常会有解决方案。