用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 相关文章推荐
通过ifame指向的页面高度调整iframe的高度
Oct 05 Javascript
一个报数游戏js版(约瑟夫环问题)
Aug 05 Javascript
提高javascript效率 一次判断,而不要次次判断
Mar 30 Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
Jan 16 Javascript
利用adb shell和node.js实现抖音自动抢红包功能(推荐)
Feb 22 Javascript
VUE预渲染及遇到的坑
Sep 03 Javascript
微信小程序搭建自己的Https服务器
May 02 Javascript
vue路由跳转传递参数的方式总结
May 10 Javascript
JavaScript代码模拟鼠标自动点击事件示例
Aug 07 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
Oct 26 Javascript
详解vue中使用transition和animation的实例代码
Dec 12 Vue.js
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 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
php中几种常见安全设置详解
2010/04/06 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
JS日历 推荐
2006/12/03 Javascript
文本框文本自动补全效果示例分享
2014/01/19 Javascript
js 动态为textbox添加下拉框数据源的方法
2014/04/24 Javascript
JavaScript中的比较操作符&gt;、=、
2014/12/31 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
2019/10/28 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
[07:48]DOTA2上海特级锦标赛主赛事首日RECAP
2016/03/04 DOTA
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
浅析Python中的join()方法的使用
2015/05/19 Python
python实现用户答题功能
2018/01/17 Python
Python获取当前脚本文件夹(Script)的绝对路径方法代码
2019/08/27 Python
Python环境下安装PyGame和PyOpenGL的方法
2020/03/25 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
工程质量承诺书
2014/03/27 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
保留意见审计报告
2015/06/05 职场文书
运动会开幕式主持词
2015/07/01 职场文书
大学生创业计划书常用模板
2019/08/07 职场文书
ROS系统将python包编译为可执行文件的简单步骤
2021/07/25 Python
win10怎么设置右下角图标不折叠?Win10设置右下角图标不折叠的方法
2022/07/15 数码科技