>  기사  >  웹 프론트엔드  >  iframe에서 페이지 앵커 오류를 처리하는 방법

iframe에서 페이지 앵커 오류를 처리하는 방법

php中世界最好的语言
php中世界最好的语言원래의
2018-04-26 10:40:452119검색

이번에는 iframe에서 페이지 앵커 포인트 오류를 ​​처리하는 방법을 보여 드리겠습니다. iframe에서 페이지 앵커 포인트 오류를 ​​처리할 때 주의 사항은 무엇입니까? 다음은 실제 사례입니다. 보세요.

적용 시나리오는 다음과 같습니다. iframe 페이지에 스크롤 막대가 상위 양식에 나타나면 앵커 지점이 현재 창 스크롤 막대를 기준으로 창을 스크롤하므로 앵커 표시가 유효하지 않게 됩니다. 자식 폼이 된 후에는 스크롤이 없으므로 당연히 스크롤되지 않습니다.

해결책은 다음과 같습니다. js를 사용하여 페이지가 중첩되었는지 확인하고, js를 사용하여 상위 양식의 iframe 위치와 firame의 앵커 포인트 위치를 계산하고, 두 개를 추가하여 페이지의 스크롤이 됩니다. 부모 양식.

문제 발생: 상위 양식 요소를 가져옵니다(도메인 제한으로 인해 모두 네트워크 환경(예: http://domain.com)에 있어야 함). 상위 양식은 현재 요소인지 확인하기 위해 여러 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>
<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>

하위 양식 페이지 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>

이 기사의 사례를 읽으신 후 방법을 익히셨으리라 믿습니다. 더 흥미로운 정보를 보려면 다른 관련 항목에 주목하세요. PHP 중국어 웹사이트의 기사!

추천 자료:

iframe 높이 및 너비 적응을 구현하는 JS+jquery 라이브러리(코드 포함)

iframe이 상위 창 요소 이벤트를 트리거하는 방법

탭 탭 스크롤 탐색 전환 구현(코드 포함) ) )

위 내용은 iframe에서 페이지 앵커 오류를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.