月初优化移动端下拉加载插件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
……厉害,技术文,顶一个。
……厉害,技术文,顶一个。
……厉害,技术文,顶一个。
学习了!!!
Ajax支持么?