用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 相关文章推荐
JQuery 学习笔记 选择器之四
Jul 23 Javascript
自己动手开发jQuery插件教程
Aug 25 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
May 23 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
Mar 01 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 Javascript
微信小程序自定义多列选择器使用详解
Jun 21 Javascript
Webpack设置环境变量的一些误区详解
Dec 19 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
Sep 21 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生成简单的验证码
2016/06/01 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
JS input文本框禁用右键和复制粘贴功能的代码
2010/04/15 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
jquery幻灯片插件bxslider样式改进实例
2014/10/15 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
微信小程序 视图层(xx.xml)和逻辑层(xx.js)详细介绍
2016/10/13 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
Bottle框架中的装饰器类和描述符应用详解
2017/10/28 Python
Python3 元组tuple入门基础
2020/02/09 Python
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
保送生自荐信范文
2013/10/06 职场文书
机关副主任个人四风问题整改措施
2014/09/26 职场文书
师德师风整改措施
2014/10/24 职场文书
副总经理岗位职责
2015/02/02 职场文书
如何利用python和DOS获取wifi密码
2021/03/31 Python
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
Python基础之数据结构详解
2021/04/28 Python
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技