window.scrollto javascript调用uiwebview行为不端

时间:2009-10-08 03:14:24

标签: javascript iphone uiwebview scroll

我有几个带有大量文本的uiwebviews。在制作window.scrollto(以及window.scroll)javascript调用webviews时,它们会滚动到一个不正确的位置。例如我想滚动到12000,但webview将每次滚动到10149。而另一个将滚动到10250.另一个,我想滚动到22000左右将每次滚动到20230。

这只发生在设备上而不是模拟器中。

我在webViewDidFinishLoad中进行调用。

我尝试多次拨打电话但没有更好的结果。似乎特定webview滚动到的任何值都是使用scrollto调用时最远的值。给它一个较小的值滚动到没有问题。只要你传递那个神奇的数字,无论它对于那个webview来说都是如此,它就不会再进一步​​了。

任何输入都会非常感激

2 个答案:

答案 0 :(得分:1)

这可能发生的一个原因是,如果您在标记中引用图像而未明确声明其大小。调用webViewDidFinishLoad:时,您的图像可能尚未完成加载。浏览器最初使用一些假设的图像大小来布局页面。加载图像并且浏览器可以确定其实际尺寸后,它将重排页面,可能导致页面的总高度增加。如果您的window.scrollTo调用在此重排之前发生,您可能正在尝试滚动文档的末尾。

如果您的情况发生了这种情况,您可以通过在标记或CSS中明确声明img标记的尺寸来解决此问题。

如果由于某种原因你不能提前预测图像尺寸,你可以推迟你的window.scrollTo调用,直到图像完成加载后为window.onload注册一个javascript事件处理程序,直到所有图像都已完成加载。在事件处理程序中,将window.location.href导航到某个虚假URL,例如“app:imagesFinishedLoading”。在您的UIWebViewDelegate中,您可以实现webView:shouldStartLoadWithRequest:navigationType:拦截此导航,取消它,然后调用window.scrollTo。

答案 1 :(得分:1)

所以我发现问题是由于我过早调用scrollTo函数(虽然我在webViewDidFinishLoad中调用它,我假设只有在页面完全加载完成后才会调用它,并且在视觉上至少看起来确实如此)。我放入一个计时器让scrollTo方法在300毫秒之后被调用,并处理它。