用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 相关文章推荐
什么是DOM(Document Object Model)文档对象模型
Mar 05 Javascript
让alert不出现弹窗的两种方法
May 18 Javascript
JQuery中上下文选择器实现方法
May 18 Javascript
jQuery中常用的遍历函数用法实例总结
Sep 01 Javascript
自己动手写的jquery分页控件(非常简单实用)
Oct 28 Javascript
Javascript中的Prototype到底是什么
Feb 16 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
vue loadmore组件上拉加载更多功能示例代码
Jul 19 Javascript
如何使用JS在HTML中自定义字符串格式化
Jul 20 Javascript
vue动态设置img的src路径实例
Sep 18 Javascript
Jquery的Ajax技术使用方法
Jan 21 jQuery
vue中多路由表头吸顶实现的几种布局方式
Apr 12 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
一个PHP的String类代码
2010/04/20 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
简介PHP的Yii框架中缓存的一些高级用法
2016/03/29 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
PHP异常处理定义与使用方法分析
2017/07/25 PHP
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
JQueryMiniUI按照时间进行查询的实现方法
2017/06/07 jQuery
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
Openlayers实现地图的基本操作
2020/09/28 Javascript
[27:08]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第二场 11.21
2020/11/23 DOTA
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
2018/03/08 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
python raise的基本使用
2020/09/10 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
英国健康和美容技术产品购物网站:CurrentBody
2019/07/17 全球购物
汽车专业毕业生自荐信
2013/11/03 职场文书
打架检讨书500字
2014/01/29 职场文书
英语求职信范文
2014/05/23 职场文书
欢迎横幅标语
2014/06/17 职场文书
励志演讲稿600字
2014/08/21 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
退休教师欢送会致辞
2015/07/31 职场文书
如何用python插入独创性声明
2021/03/31 Python