在用户交互之前,Android WebView 无法完全呈现内容

Posted

技术标签:

【中文标题】在用户交互之前,Android WebView 无法完全呈现内容【英文标题】:Android WebView Fails to Completely Render Content Until User Interaction 【发布时间】:2012-05-10 08:51:07 【问题描述】:

我有一个自定义类扩展显示 html 内容的 WebView。当用户单击 HTML 文档中的链接时,我计算要滚动到的 X 值,然后使用 scrollTo(x,y) 通过可运行文件显示该位置(见下文)

 post( new Runnable() 

            @Override
            public void run() 

                scrollTo( x, 0 );
                MyWebView.this.invalidate();
                MyWebView.this.buildDrawingCache();
                MyWebView.this.refreshDrawableState();
                MyWebView.this.postInvalidate();
            
         );

滚动后,webview 有可能无法渲染整个文档。矩形的空白块显示在文本应该在的位置,每次看似随机放置。这是截图:http://i.imgur.com/g192Y.jpg

当我触摸 webview 进行滚动时,它会立即呈现缺失的部分。

到目前为止,这种行为仅限于三星 Galaxy 10.1" 平板电脑。

有谁知道解决方法/如何强制 webkit 重新渲染页面?

【问题讨论】:

运气好吗?有类似的问题。这在 Jelly Bean 中运行良好,但在 ICS 中一直存在。 即使在果冻豆上我也有这个确切的问题。不过它在 Kitkat 上运行良好。 【参考方案1】:

好吧,我在这台平板电脑上遇到了完全相同的问题,唯一的区别是我使用 iscroll 进行所有滚动。我为这个问题使用的解决方案是通过 javascript “滚动”一个隐藏的 DIV 并解决了这个问题。我希望这可以帮助任何有同样问题的人。如果您使用 iscroll 他们有一种方法可以“滚动”到固定位置,也许这​​也可以帮助您,如果不是那么难检测到 touchmovemousemove事件。 这里的重点是,即使不可见,您只需要在 html 上的任意位置伪造滚动即可。

【讨论】:

以上是关于在用户交互之前,Android WebView 无法完全呈现内容的主要内容,如果未能解决你的问题,请参考以下文章

Android中WebView的JavaScript代码和本地代码交互的三种方式

Android WebView 加载超长 JS 数据

Android:你要的WebView与 JS 交互方式 都在这里了

android中webview与js交互

Webview Android与js交互

android webview怎么加载ionic的html5