Maison >interface Web >js tutoriel >Comment gérer l'échec de l'ancrage de page dans iframe
Cette fois, je vais vous montrer comment gérer l'échec de l'ancrage de page dans iframe. Quelles sont les précautions pour gérer l'échec d'ancrage de page dans iframe. Voici un cas pratique, jetons un coup d'oeil.
Le scénario d'application est le suivant : la page iframe n'a pas de barres de défilement. Si une barre de défilement apparaît dans le formulaire parent, la marque d'ancrage deviendra invalide car l'ancre fait défiler la fenêtre en fonction de la barre de défilement de la fenêtre actuelle et devient un formulaire enfant S'il n'y a pas de barre de défilement, il ne défilera naturellement pas.
La solution est : utilisez js pour déterminer si la page est imbriquée, utilisez js pour calculer la position de l'iframe dans le formulaire parent, la position du point d'ancrage dans la firame, et ajoutez les deux pour devenir le défilement du formulaire parent.
J'ai rencontré un problème : obtenez l'élément de formulaire parent (en raison des restrictions de domaine, tous doivent être dans l'environnement réseau (c'est-à-dire http://domain.com)) ; c'est la page iframe actuelle.
Code :
Page du formulaire parent 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> <p style="width:100%;background:#f00;height:500px;"></p> <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>
Page du sous-formulaire 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; } p{ 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> <p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" a">A</a></p> <p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" b">B</a></p> <p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" c">C</a></p> <p><a href="" name=" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" d">D</a></p> </body> </html>
Je crois que vous avez lu cet article Vous maîtrisez la méthode des cas. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
Comment implémenter l'événement d'élément de fenêtre parent déclencheur iframe
Implémentation du changement de navigation par défilement des onglets (avec code)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!