用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 DOM学习第六章 表单实例
Feb 19 Javascript
在JQuery dialog里的服务器控件 事件失效问题
Dec 08 Javascript
JS的replace方法介绍
Oct 20 Javascript
JavaScript给url网址进行encode编码的方法
Mar 18 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
Jul 12 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 Javascript
详解如何探测小程序返回到webview页面
May 14 Javascript
vue路由 遍历生成复数router-link的例子
Oct 30 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
spl_autoload_register与autoload的区别详解
2013/06/03 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
2018/10/15 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
js实现浮动在网页右侧的简洁QQ在线客服代码
2015/09/04 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
python虚拟环境virtualenv的使用教程
2017/10/20 Python
python导入pandas具体步骤方法
2019/06/23 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
We Fashion荷兰:一家国际时装公司
2018/04/18 全球购物
办公室经理岗位职责
2014/01/01 职场文书
服装创业计划书范文
2014/02/05 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
亲子活动总结
2014/04/26 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
大学生实习证明
2015/06/16 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android