西门的后花园

一个热爱网络的年轻人的博客

iOS Safari里,获取网页窗口的正确高度

月初优化移动端下拉加载插件dropload的时候,发现一个iOS Safari的bug。我的目的是想不论是第一次加载页面、之后刷新页面或者浏览器窗口变化的时候(resize),都可以获取到当前正确的窗口高度。结果简单一句$(window).height()居然办不到。没办法,只有慢慢测试,加上求助于同事。之后同事搜到一篇国外文章,算是解决了这个问题。由此可见懂英文的重要性!

最后发现原来是浏览器的bug,同一个iPhone上其他浏览器都是好的,唯独Safari出问题。写了5个DEMO,遇到这个问题的朋友可以参考一下。

以下DEMO必须在iPhone的Safari里测试,可以通过微信扫一扫,点右上角三点,在Safari中打开。

首先打开jQuery DEMO 1。iPhone 5s里,Safari第一次打开页面,高度为460/460,滑动网页,高度为460/529。

然后打开Zepto DEMO 1。iPhone 5s里,Safari第一次打开页面,高度为460/460,滑动网页,高度为529/529。此时刷新页面,高度为1409/1409,滑动页面,高度为529/529,再滑回顶部,高度为460/460。

再打开jQuery DEMO 2。Phone 5s里,Safari第一次打开页面,高度为460/460,460/460。此时刷新页面,高度为1409/460,460/460。

最后打开Zepto DEMO 2。iPhone 5s里,Safari第一次打开页面,高度为460/460,460/460。此时刷新页面,高度为1409/1409,460/460。

(注:DEMO里Zepto是1.4版本,最新版1.6已经解决此问题)

具体是为啥,这个就得去研究源码了,有兴趣的可以去官方github里提pull requests。

解决方案:

DEMO。简而言之就是第一次获取高度,用document.documentElement.clientHeight,以后再获取高度,用window.innerHeight。重度依赖第三方库也不是好事,最后还得用原生js来解决。

参考资料:http://browser.colla.me/show/jquery_not_offer_right_window_height_on_iOS

评论列表

  1. ……厉害,技术文,顶一个。

  2. ……厉害,技术文,顶一个。

  3. ……厉害,技术文,顶一个。

  4. 同州追梦人

    :mrgreen: :mrgreen: :mrgreen: Ajax支持么?

发表评论

分类目录