用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 相关文章推荐
javascript 二维数组的实现与应用
Mar 16 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
Aug 11 Javascript
javascript实现tab响应式切换特效
Jan 29 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
Jan 08 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
May 24 Javascript
jQuery 改变P标签文本值方法
Feb 24 jQuery
简单介绍react redux的中间件的使用
Apr 06 Javascript
详解Vue前端生产环境发布配置实战篇
May 07 Javascript
JS 自执行函数原理及用法
Aug 05 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 Javascript
JavaScript的垃圾回收机制与内存管理
Aug 06 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.ini实现Mysql导入数据库文件最大限制的修改方法
2007/12/11 PHP
php foreach、while性能比较
2009/10/15 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
bootstrapValidator bootstrap-select验证不可用的解决办法
2017/01/11 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
json数据传到前台并解析展示成列表的方法
2018/08/06 Javascript
Vue2 监听属性改变watch的实例代码
2018/08/27 Javascript
jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】
2018/08/28 jQuery
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
JavaScript中BOM对象原理与用法分析
2019/07/09 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
node.js使用fs读取文件出错的解决方案
2019/10/23 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
python中对数据进行各种排序的方法
2019/07/02 Python
Python 脚本实现淘宝准点秒杀功能
2019/11/13 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
Django中的AutoField字段使用
2020/05/18 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
中专自荐信
2013/10/13 职场文书
小学重阳节活动总结
2015/03/24 职场文书
检讨书模板大全
2015/05/07 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL