用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下判断一个对象是否具有指定名称的属性的的代码
Jan 11 Javascript
IE关闭时判断及AJAX注销案例学习
Feb 18 Javascript
Js,alert出现乱码问题的解决方法
Jun 19 Javascript
多个checkbox被选中时如何判断是否有自己想要的
Sep 22 Javascript
jquery+php随机生成红包金额数量代码分享
Aug 27 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
Sep 27 Javascript
js禁止Backspace键使浏览器后退的实现方法
Sep 01 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
Javascript之高级数组API的使用实例
Mar 08 Javascript
js实现for循环跳过undefined值示例
Jul 02 Javascript
JavaScript中的函数式编程详解
Aug 22 Javascript
微信小程序组件生命周期的踩坑记录
Mar 03 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
php 判断数组是几维数组
2013/03/20 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
css图片自适应大小
2007/11/28 Javascript
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
AngularJS国际化详解及示例代码
2016/08/18 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
EasyUI中的dataGrid的行内编辑
2017/06/22 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
layui加载数据显示loading加载完成loading消失的实例代码
2019/09/23 Javascript
解决Vue-cli3没有vue.config.js文件夹及配置vue项目域名的问题
2020/12/04 Vue.js
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
python字符串编码识别模块chardet简单应用
2015/06/15 Python
深入解析Python中函数的参数与作用域
2016/03/20 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
python对execl 处理操作代码
2020/06/22 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
邮政竞聘演讲稿
2014/09/03 职场文书
交通工程专业推荐信
2014/09/06 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
新员工考核评语
2014/12/31 职场文书
员工手册编写范本
2015/05/14 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS