window.scrollto javascript调用uiwebview行为不正常

window.scrollto javascript调用uiwebview行为不正常,javascript,iphone,uiwebview,scroll,Javascript,Iphone,Uiwebview,Scroll,我有几个UIWebView,其中包含大量文本。当对WebView进行window.scrollto(以及window.scroll)javascript调用时,它们会滚动到错误的位置。e、 g.我想滚动到12000,但webview每次都会滚动到10149。而另一个将滚动到10250。还有一个,我想滚动到22000左右,每次滚动到20230 这只发生在设备上,而不是在模拟器中 我正在webViewDidFinishLoad中拨打电话 我试过多次打这个电话,但没有更好的结果。看起来,当使用scro

我有几个UIWebView,其中包含大量文本。当对WebView进行window.scrollto(以及window.scroll)javascript调用时,它们会滚动到错误的位置。e、 g.我想滚动到12000,但webview每次都会滚动到10149。而另一个将滚动到10250。还有一个,我想滚动到22000左右,每次滚动到20230

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

我正在webViewDidFinishLoad中拨打电话

我试过多次打这个电话,但没有更好的结果。看起来,当使用scrollto调用时,特定webview滚动到的任何值都是它能达到的最大值。如果给它一个较小的值以滚动,则没有问题。只是如果你传递了那个神奇的数字,不管它是什么,它都不会再继续了


如果您在标记中引用图像而没有明确声明其大小,则可能会发生这种情况,任何输入都将非常感谢。调用webViewDidFinishLoad:时,您的图像可能尚未完成加载。浏览器最初使用一些假定的图像大小来布局页面。一旦加载图像并且浏览器可以确定其真实尺寸,它将回流页面,可能导致页面总高度增加。如果您的window.scrollTo调用在此回流之前发生,则您可能正试图滚动到文档末尾

如果您的情况就是这样,您可以通过在标记或CSS中显式声明img标记的维度来解决它


如果由于某些原因无法提前预测图像尺寸,可以通过为window.onload注册javascript事件处理程序,将window.scroll调用推迟到图像加载完成后,直到所有图像加载完成后才会触发。在事件处理程序中,将window.location.href导航到一些伪URL,如“app:imagesfinishedload”。在UIWebViewDelegate中,您可以实现webView:shouldStartLoadWithRequest:navigationType:若要拦截此导航,请取消它,然后调用window.scrollTo。

因此我发现问题是由于调用scrollTo函数太早造成的(虽然我在webViewDidFinishLoad中调用了它,我认为只有在页面完全加载完毕后才会调用它,而且至少在视觉上看起来是这样的)。我加入了一个计时器,让scrollTo方法在300毫秒后调用,这就解决了问题。

谢谢你的建议。我一度怀疑问题与图像有关,但问题发生在包含图像和不包含图像的页面上。我实际上发现问题是由于我过早调用scrollTo函数造成的y(尽管我在webViewDidFinishLoad中调用了它,我假设只有在页面完全加载完毕后才会调用它,至少在视觉上看起来是这样的)所以我加入了一个计时器,让scrollTo方法在300毫秒后调用,这就解决了问题。是的,webViewDidFinishLoad是有欺骗性的。我发现页面上嵌入的Javascript在调用webViewDidFinishLoad时通常没有被解释,所以我不得不求助于通过webView:sh从JS向ObjC发送消息ouldStaqrtLoadWithRequest:navigationType在几个不同的应用程序上。谢谢你问这个问题。我当时正使劲把头撞在墙上想弄明白。