用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 相关文章推荐
将HTMLCollection/NodeList/伪数组转换成数组的实现方法
Jun 20 Javascript
JavaScript初学者应注意的七个细节小结
Jan 30 Javascript
jquery默认校验规则整理
Mar 24 Javascript
使用jQuery实现input数值增量和减量的方法
Jan 24 Javascript
js实现的tab标签切换效果代码分享
Aug 25 Javascript
基于jquery实现的树形菜单效果代码
Sep 06 Javascript
JS把内容动态插入到DIV的实现方法
Jul 19 Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 Javascript
基于JavaScript实现自动更新倒计时效果
Dec 19 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
webpack本地开发环境无法用IP访问的解决方法
Mar 20 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
Aug 31 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
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
thinkphp5使html5实现动态跳转的例子
2019/10/16 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
JS trim去空格的最佳实践
2011/10/30 Javascript
读取input:file的路径并显示本地图片的方法
2013/09/23 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
详解微信小程序Page中data数据操作和函数调用
2017/09/27 Javascript
面包屑导航详解
2017/12/07 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
Angular4实现图片上传预览路径不安全的问题解决
2017/12/25 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
vue动态设置页面title的方法实例
2020/08/23 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
python利用urllib和urllib2访问http的GET/POST详解
2017/09/27 Python
python操作oracle的完整教程分享
2018/01/30 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
python学生管理系统开发
2019/01/30 Python
python 模拟登陆github的示例
2020/12/04 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
进程的查看和调度分别使用什么命令
2013/12/14 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
新学期开学寄语
2014/01/18 职场文书
圣诞节红领巾广播稿
2014/02/03 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
先进事迹演讲稿
2014/09/01 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
各种货币符号快捷输入
2022/02/17 杂记