在iPad1及iPad2里面浏览含有iframe的Web页面,会出现一个很抓狂的问题,就是iframe内引用的页面内容不能上下滑动(滚动),测试了一下其余的设备,这个问题也一样出如今了Android平台的浏览器上,大部分移动设备都存在这个问题,我估计开发商的初衷是为了方便用户浏览页面,而使iframe的宽度和高度自动匹配其内容尺寸,可是对于iframe内的touch事件却支持不完善,所以出现了iframe滑动无响应的现象。
在网上一艘,这方面的解决方法很多,可是内容和方法彷佛都差很少,大可能是经过给iframe内的window对象绑定事件,发生touch事件时即时改变iframe上级元素的scrollTop和scrollLeft值来实现,下面是个人实现方法:
1. HTML:
<div id="iframeBox">
<iframe src="
http://blog.luozhihua.com" width="320" height="240"></iframe>
</div>
2. CSS:
#iframeBox{
border:1px solid #000;
width:400px;
height:320px;
overflow:auto;
}
#iframeBox iframe{
/* 在iPad及部分Android浏览器内下面的width、height无效 */
width:100%;
height:100%;
overflow:auto;
margin:0px; border:0px;
}
3. JavaScript:
/**
* @param iframeID iframe的id或者iframeElement[Doc Object]
* @param iframeWrapper 用于包装iframe的元素
*/
function scrollIframeForIOS(iframe, iframeWrapper)
{
if(!navigator.userAgent.match(/iPad|iPhone/i)) return false;
var touchY = 0,
touchX = 0;
iframe = typeof(iframe)=="string" ? document.getElementById(iframe) : iframe;
iframe.onload = function(){
var ifrWin = iframe.contentWindow,
ifrDoc = ifrWin.document;
// iframe的上一级节点
iframeWrapper = iframeWrapper||ifrWin.frameElement.parentNode;
// 记录手指按下的位置
ifrDoc.body.addEventListener("touchstart", function( event ){
touchX = event.targetTouches[0].pageX;
touchY = event.targetTouches[0].pageY;
});
ifrDoc.body.addEventListener("touchmove", function( event ){
e.preventDefault(); // 阻止整个页面拖动
iframeWrapper.scrollLeft += (touchX - event.targetTouches[0].pageX);
iframeWrapper.scrollTop += (touchY - event.targetTouches[0].pageY);
});
}
return true;
};
// 调用方法:body onload="scrollIframeForIOS('iframeBox');"
原文连接:
http://blog.luozhihua.com/?p=1034