Rumah >hujung hadapan web >tutorial js >Gunakan jquery untuk membetulkan masalah kegagalan sauh halaman di bawah iframe_jquery
Senario aplikasi ialah: halaman iframe tidak mempunyai bar skrol Jika bar skrol muncul dalam borang induk, tag anchor akan menjadi tidak sah kerana titik sauh menatal tetingkap berdasarkan bar skrol tetingkap semasa dan hilang selepas. ia menjadi bentuk kanak-kanak Bar skrol secara semula jadi tidak akan menatal.
Penyelesaiannya ialah: gunakan js untuk menentukan sama ada halaman bersarang, gunakan js untuk mengira kedudukan iframe dalam bentuk induk, kedudukan titik sauh dalam firam, dan tambahkan kedua-duanya untuk menjadi tatal borang induk.
Menghadapi masalah: Dapatkan elemen borang induk (kerana sekatan domain, semua perlu berada dalam persekitaran rangkaian (iaitu http://domain.com)); satu halaman iframe semasa.
Kod:
index.html halaman borang ibu bapa
<!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>
Halaman subform 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>