【问题标题】:Android WebView + loadUrl with javascript + onPageFinished = lagAndroid WebView + loadUrl with javascript + onPageFinished = lag
【发布时间】:2011-04-28 14:31:03
【问题描述】:

我有加载一些页面的 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 中的“使第一个视图可见”方法创建另一个 WebViewClient,并使用它来调用 JS。但它只是不断因 NPE 错误而崩溃。

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

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

【问题讨论】:

    标签: javascript android webview


    【解决方案1】:

    好吧,我想我明白了。我们可以从 javascript 的末尾进行回调,该回调将触发“显示视图”——例如 herehere(带有处理程序,因为我想更新 ui)。 但它不会改变任何东西,问题似乎在于渲染速度。只是很慢。所以现在我会在触发 JS 后坚持 1 秒的延迟。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 检测页面是否加载不是问题。问题是为什么其他方法在 javascript 完成之前触发?
    • 因为从技术上讲,根据您的浏览器,页面加载完毕。 Javascript 运行和页面渲染是两个完全不同的事情。 Javascript 仅在页面完全下载时运行,您只能检测页面何时完全下载。我不是 Javascript 或 JQuery 方面的专家,但我确实认为如果有 JQuery 问题,您会找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多