用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 相关文章推荐
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
Sep 25 Javascript
JavaScript Cookie的读取和写入函数
Dec 08 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
Sep 26 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
Nov 25 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
10个在JavaScript开发中常遇到的BUG
Dec 18 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
vue打包相关细节整理(小结)
Sep 28 Javascript
vue+axios 拦截器实现统一token的案例
Sep 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
优化PHP程序的方法小结
2012/02/23 PHP
PHP函数学习之PHP函数点评
2012/07/05 PHP
php二维数组排序与默认自然排序的方法介绍
2013/04/27 PHP
基于PHP遍历数组的方法汇总分析
2013/06/08 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
PHP检测移动设备类mobile detection使用实例
2014/04/14 PHP
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
JavaScript省市联动实现代码
2014/02/15 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
Vue中使用的EventBus有生命周期
2018/07/12 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
Vue formData实现图片上传
2019/08/20 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
Python类属性与实例属性用法分析
2015/05/09 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
Matplotlib绘制雷达图和三维图的示例代码
2020/01/07 Python
使用Python文件读写,自定义分隔符(custom delimiter)
2020/07/05 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
Yahoo-PHP面试题4
2012/05/05 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
双拥工作宣传标语
2014/06/26 职场文书
会议欢迎词
2015/01/23 职场文书
罚站检讨书
2015/01/29 职场文书