我有几个带有大量文本的 uiwebview。当对 web View 进行 window.scrollto(以及 window.scroll)javascript 调用时,它们滚动到不正确的位置。例如我想滚动到 12000,但 webview 每次都会滚动到 10149。而另一个将滚动到 10250。还有一个,我想滚动到 22000 左右,每次都会滚动到 20230。
这只发生在设备上而不是模拟器中。
我正在 webViewDidFinishLoad 中进行调用。
我试过多次调用,但没有更好的结果。似乎特定 webview 滚动到的任何值都是使用 scrollto 调用时它可以到达的最远。给它一个较小的滚动值是没有问题的。只是如果您传递了那个神奇的数字,无论该 webview 是什么,它都不会再继续。
任何输入将不胜感激
最佳答案
可能发生这种情况的一个原因是,如果您在标记中引用图像而没有明确声明它们的大小。当 webViewDidFinishLoad: 被调用时,您的图像可能尚未完成加载。浏览器最初使用一些假定的图像大小来布置页面。一旦图像被加载并且浏览器可以确定其实际尺寸,它将重排页面,可能导致页面的总高度增加。如果您的 window.scrollTo 调用发生在此重排之前,您可能试图滚动到文档末尾。
如果这是您遇到的情况,您可以通过在标记或 CSS 中明确声明 img 标签的尺寸来解决它。
如果由于某种原因您无法提前预测图像尺寸,您可以通过为 window.onload 注册一个 javascript 事件处理程序来推迟您的 window.scrollTo 调用,直到图像完成加载,直到所有图像都已完成加载。在事件处理程序中,将您的 window.location.href 导航到一些虚假的 URL,例如“app:imagesFinishedLoading”。在您的 UIWebViewDelegate 中,您可以实现 webView:shouldStartLoadWithRequest:navigationType: 来拦截此导航,取消它,然后调用 window.scrollTo。
关于javascript - window.scrollto javascript 调用 uiwebview 行为不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1535430/