javascript - window.scrollto javascript 调用 uiwebview 行为不当

标签 javascript iphone uiwebview scroll

我有几个带有大量文本的 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/

相关文章:

javascript - 纯 JavaScript 中滚动到顶部动画?无法使用 jQuery

javascript - 当窗口通过某些多个宽度时重新加载页面

javascript - 如何在 JavaScript 中向具有多个异步调用的函数添加回调?

iphone - colorWithPatternImage 和 colorWithPatternImage.CGColor Flip

iphone - 检测仅 iPhone 应用程序访问 Web 服务的最佳实践?

Iphone NSPredicate 如何进行 INNER JOIN?

ios - Objective-C 发送按键事件到 webview

ios - 以编程方式在 iOS 上滚动 UIWebView

javascript - 按钮在注册表单中不起作用

javascript - 使用 webkit-tap-highlight 查找元素