用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 相关文章推荐
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
JavaScript希尔排序、快速排序、归并排序算法
May 08 Javascript
BootStrap无限级分类(无限极分类封装版)
Aug 26 Javascript
Javascript中常见的逻辑题和解决方法
Sep 17 Javascript
Node.js的基本知识简单汇总
Sep 19 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
Sep 28 Javascript
H5移动端图片压缩上传开发流程
Nov 09 Javascript
js实现一个简单的数字时钟效果
Mar 29 Javascript
基于JSONP原理解析(推荐)
Dec 04 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 Javascript
JavaScript判断数组类型的方法
Oct 23 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
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
为超链接加上disabled后的故事
2010/12/10 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
jQuery中slidedown与slideup方法用法示例
2016/09/16 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
bootstrap daterangepicker双日历时间段选择控件详解
2017/06/15 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
axios封装与传参示例详解
2020/10/18 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
Python实现感知器模型、两层神经网络
2017/12/19 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
django2.0扩展用户字段示例
2019/02/13 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
Python判断字符串是否为合法标示符操作
2020/09/03 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
python selenium 获取接口数据的实现
2020/12/07 Python
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
某公司的.net工程师面试题笔试题
2013/11/22 面试题
优秀教师的感人事迹
2014/02/04 职场文书
党员领导干部承诺书
2014/05/28 职场文书
个性发展自我评价2015
2015/03/09 职场文书
2015年中个人总结范文
2015/03/10 职场文书
教师节表彰会主持词
2015/07/06 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS