用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中自定义对象的属性方法分享
Jul 12 Javascript
JavaScript调用ajax获取文本文件内容实现代码
Mar 28 Javascript
javascript实现浏览器窗口传递参数的方法
Sep 03 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
Sep 26 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
May 30 Javascript
JS实现动态修改table及合并单元格的方法示例
Feb 20 Javascript
jQuery.form.js的使用详解
Jun 14 jQuery
node+koa2+mysql+bootstrap搭建一个前端论坛
May 06 Javascript
微信小程序冒泡事件及其阻止方法实例分析
Dec 06 Javascript
angular 用Observable实现异步调用的方法
Dec 27 Javascript
安装多版本Vue-CLI的实现方法
Mar 24 Javascript
vue实现员工信息录入功能
Jun 11 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
PHP4中session登录页面的应用
2008/07/25 PHP
PHP获取url的函数代码
2011/08/02 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
2014/11/22 PHP
PHP XML和数组互相转换详解
2016/10/26 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
javascript移出节点removeChild()使用介绍
2014/04/03 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
Javascript发送AJAX请求实例代码
2016/08/21 Javascript
js插件Jcrop自定义截取图片功能
2016/10/14 Javascript
浅析vue数据绑定
2017/01/17 Javascript
JavaScript运动框架 多值运动(四)
2017/05/18 Javascript
基于nodejs 的多页面爬虫实例代码
2017/05/31 NodeJs
JS库之Highlight.js的用法详解
2017/09/13 Javascript
KOA+egg.js集成kafka消息队列的示例
2018/11/09 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
python类继承用法实例分析
2014/10/10 Python
Python脚本实现代码行数统计代码分享
2015/03/10 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
python3 模拟登录v2ex实例讲解
2017/07/13 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
Python&amp;&amp;GDAL实现NDVI的计算方式
2020/01/09 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
教师实习的自我鉴定
2013/10/26 职场文书
公司晚会主持词
2014/03/22 职场文书
信用社主任竞聘演讲稿
2014/05/23 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
2014教师教育实践活动对照检查材料思想汇报
2014/09/21 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫