2009-10-08 80 views
2

我有幾個uiwebviews與大量的文字。當向webviews調用window.scrollto(以及window.scroll)javascript調用時,它們會滾動到不正確的位置。例如我想滾動到12000,但webview將每次滾動到10149。而另一個將滾動到10250.另一個,我想滾動到22000左右,將滾動到每次20230代替。window.scrollto JavaScript調用uiwebview行爲不端

這隻發生在設備上而不發生在模擬器中。

我在webViewDidFinishLoad中進行調用。

我已嘗試多次撥打電話,但沒有更好的結果。似乎無論使用scrollto調用時,特定的webview滾動的值是多大。當給它滾動到更小的值時沒有問題。只是如果你傳遞了這個神奇的數字,無論它用於該webview,它都不會進一步。

任何輸入將不勝感激

+0

謝謝你問這個。試圖弄清楚這一點,我正在撞牆。 – markshiz 2011-08-31 18:09:00

回答

1

的一個原因,這可能發生的情況是,如果你在引用您的標記圖像,而無需顯式聲明它們的大小。當webViewDidFinishLoad:被調用時,您的圖像可能尚未完成加載。瀏覽器首先使用一些假定的圖像大小繪製頁面。一旦圖像被加載並且瀏覽器可以確定其真實尺寸,它將重新排列頁面,可能導致頁面的總高度增加。如果您的window.scrollTo調用發生在重排之前,您可能會嘗試滾動到文檔的末尾。

如果這是你的情況,你可以通過在你的標記或CSS中明確聲明你的img標籤的尺寸來解決它。

如果由於某種原因您無法預先預測圖像尺寸,則可以推遲您的window.scrollTo調用,直到圖像完成加載後,通過爲window.onload註冊javascript事件處理程序,該處理程序不會觸發直到所有圖像完成加載。在事件處理程序中,將window.location.href導航到一些僞造的URL,如「app:imagesFinishedLoading」。在你的UIWebViewDelegate中,你可以實現webView:shouldStartLoadWithRequest:navigationType:攔截這個導航,取消它,然後打電話給window.scrollTo。

+0

感謝您的建議。我曾有一次懷疑這個問題與圖像有關,但是它出現在包含但不包含它們的頁面上。我實際上發現這個問題是由於我過早調用scrollTo函數(儘管我在webViewDidFinishLoad中調用它,我認爲只有在頁面完全加載完成後纔會調用它,並且至少在視覺上看起來確實如此)。所以我放入了一個定時器,讓scrollTo方法在300毫秒後調用,並處理它。 – ilyashev 2009-10-09 14:48:25

+0

是的,webViewDidFinishLoad是騙人的。我發現嵌入在頁面上的Javascript通常在webViewDidFinishLoad被調用的時候沒有被解釋,所以我不得不通過webView發送一條消息從JS到ObjC:shouldStaqrtLoadWithRequest:navigationType在幾個不同的應用程序上。 – cduhn 2009-10-09 22:52:13

1

所以我發現這個問題是由於我過早調用scrollTo函數(儘管我在webViewDidFinishLoad中調用它,我認爲只有在頁面完全加載完成後纔會調用它,並且從外觀上看,至少它看起來似乎是)。我把一個計時器放在300毫秒後的scrollTo方法中,並處理了它。