2011-04-28 57 views
7

我有WebView,它加载了一些页面,当它完成时,我应用了一些JavaScript魔法来搞砸DOM。一切都很好,页面加载和onPageFinished我只是叫wv.loadUrl(javascript);Android WebView + loadUrl with javascript + onPageFinished = lag

但我不希望看到加载过程中,和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))后,现在我只是添加的延迟,但是这就像..是啊。

回答

1

好吧,我想我想通了。我们可以从JavaScript的末尾回调“show view”,比如herehere(带处理程序,因为我想更新ui)。 但它不会改变任何东西,问题似乎在渲染速度。这只是缓慢。所以现在我只会在JS发射后延迟1秒。

+1

我认为我们有这个bug的解决方案:http://android-know-how-to.blogspot.co.il/2013/08/android-webview-javascript-onpagefinish.html – TacB0sS 2013-08-19 13:37:48

0

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

+1

这不是检测页面是否加载的问题。问题是为什么其他在JavaScript之前发射的方法完成了? – Sver 2011-04-28 14:58:49

+0

因为从技术上讲,并根据您的浏览器,页面完成加载。 Javascript正在运行,而页面呈现是两个完全分开的东西。只有当页面完全下载时,Javascript才会运行,并且只能在页面完全下载时检测到。我不是Javascript或JQuery方面的专家,但我确实认为如果有JQuery问题的话,你会发现你的解决方案。 – NotACleverMan 2011-04-28 15:11:02

相关问题