用jquery修复在iframe下的页面锚点失效问题


Posted in Javascript onAugust 22, 2014

应用场景是:iframe页面没有滚动条,在父窗体中出现滚动条,锚点标记就会失效,因为,锚点是根据当前窗口滚动条滚动窗口的,成为子窗体后没有了滚动条,自然不会滚动。

解决办法是:用js判断页面是否被嵌套,用js计算iframe在父窗体位置,锚点在firame中的位置,两者相加成为父窗体的滚动。

遇到问题:获取父窗体元素(因为有域限制,所有需要在网络环境下方位(即http://domain.com));父窗体嵌套多个iframe,判断是否是当前iframe页面。

代码:

父窗体页面 index.html

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
border: 0;
}
html,
body{
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div style="width:100%;background:#f00;height:500px;"></div>
<a href="">dd</a>
<a href="">ddd</a>
<iframe name="iframe2" id="iframe2" src="iframe.html?a=b&c=d" style="width:100%;height:2060px;"></iframe>
<iframe name="iframe2" id="iframe2" src="iframe.html?a=d&c=b" style="width:100%;height:2060px;"></iframe>
</body>
</html>

子窗体页面iframe.html

<!doctype html>
<html>
<head>
<title></title>
<style type="text/css">
a{
padding: 5px;
border: 1px solid #f00;
float: left;
display: block;
margin-right: 5px;
}
div{
width: 80%;
margin: 10px auto;
height: 500px;
border: 1px solid #f00;
font-size: 30px;
}
</style>
<script type="text/javascript" src="jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(function(){
//如果是iframe则需要在网络中访问,因为js里有域限制
//如果没有iframe则不进行处理,
if(window!==window.top){
//获取top窗口中的iframe,如果有iframe嵌套过多,请自行修改
var iframeList=window.top.document.getElementsByTagName('iframe');
for(var i=0;i<iframeList.length;i++){
//判断当前窗口是否循环中的iframe
if(window.location.toString().indexOf(iframeList[i].getAttribute('src').toString())!=-1){

//等自己的所在iframe加载完成给a锚点加事件
window.top.document.getElementsByTagName('iframe')[i].onload=function(){
//确定iframe在父窗体的距顶部距离
var top = window.top.document.getElementsByTagName('iframe')[i].offsetTop;
$('a').each(function(){
var href = $(this).attr('href');
if(href.indexOf('#')!=-1){//判断是否是锚点而不是链接
var name = href.substring(href.indexOf('#')+1);
$(this).bind('click',function(){
$('a').each(function(){
if($(this).attr('name')==name){
//父窗口滚动
$(window.parent).scrollTop($(this).offset().top+top);
}
});
});
}
});
}
}
}
}

});

</script>
</head>
<body>
<a href="#a" rel="external nofollow" >a</a>
<a href="#b" rel="external nofollow" >b</a>
<a href="#c" rel="external nofollow" >c</a>
<a href="#d" rel="external nofollow" >d</a>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" a">A</a></div>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" b">B</a></div>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" c">C</a></div>
<div><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" d">D</a></div>

</body>
</html>
Javascript 相关文章推荐
&amp;lt;script defer&amp;gt; defer 是什么意思
May 10 Javascript
浏览器加载、渲染和解析过程黑箱简析
Nov 29 Javascript
探讨JavaScript中声明全局变量三种方式的异同
Dec 03 Javascript
javascript设计模式之解释器模式详解
Jun 05 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
Mar 31 Javascript
js漂浮广告实现代码
Aug 15 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
Nov 18 Javascript
js继承实现方法详解
Dec 16 Javascript
JS中Array数组学习总结
Jan 18 Javascript
jQuery插件FusionCharts绘制的3D饼状图效果实例【附demo源码下载】
Mar 03 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
Vue路由的模块自动化与统一加载实现
Jun 05 Javascript
JavaScript实现的石头剪刀布游戏源码分享
Aug 22 #Javascript
一个很有趣3D球状标签云兼容IE8
Aug 22 #Javascript
wap图片滚动特效无css3元素纯js脚本编写
Aug 22 #Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
Aug 22 #Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
Aug 22 #Javascript
js使用正则实现ReplaceAll全部替换的方法
Aug 22 #Javascript
IE浏览器IFrame对象内存不释放问题解决方法
Aug 22 #Javascript
You might like
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php判断linux下程序问题实例
2015/07/09 PHP
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js判断上传文件后缀名是否合法
2016/01/28 Javascript
Javascript函数中的arguments.callee用法实例分析
2016/09/16 Javascript
BootStrap 动态添加验证项和取消验证项的实现方法
2016/09/28 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
微信小程序左右滚动公告栏效果代码实例
2019/09/16 Javascript
Javascript新手入门之字符串拼接与变量的应用
2020/12/03 Javascript
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
Python wxPython库Core组件BoxSizer用法示例
2018/09/03 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
详解python中的闭包
2020/09/07 Python
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
人力资源作业细则
2014/03/03 职场文书
小学教师读书活动总结
2014/07/08 职场文书
班级出游活动计划书
2014/08/15 职场文书
2014年助理工程师工作总结
2014/11/14 职场文书
2015领导干部廉洁自律工作总结
2015/07/23 职场文书
学校食堂管理制度
2015/08/04 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
Python绘制分类图的方法
2021/04/20 Python
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript