Firefox 반환 시 Iframe 표시 버그 해결_Experience 교환
<script type="text/javascript">//<![CDATA[ if(getCookie('firefoxIframe')){ document.write('<p id="addAd"><a href="cookie.html">点击这里删除这个iframe</a></p>'); document.write('<iframe height="120" width="300" marginheight="0" marginwidth="0" frameborder="0" src="nAdPre.swf"></iframe>'); }else{ document.write('<p id="addAd"><a href="cookie.html">点击这里增加一个iframe</a></p>'); } //]]></script>
버그 데모를 엽니다. 쿠키가 존재하지 않으므로 표시되는 플래시 3개는 모두 Iframe을 통해 구현됩니다. 🎜>"iframe 광고를 추가하려면 여기를 클릭하세요"를 클릭하고 새 페이지로 이동하여 firefoxIframe이라는 쿠키를 작성하세요.
버그 데모 페이지로 돌아가서 iframe을 찾으려면 "돌아가기" 또는 브라우저의 돌아가기 버튼을 클릭하세요. 내부 플래시 위치가 잘못되었습니다. 즉, 위치 2의 iframe 링크 플래시가 로드되지 않습니다. 위치 3의 플래시가 표시되고 위치 3의 플래시가 위치 4에 표시되지만 위치 4의 플래시는 여전히 존재합니다.
탭을 닫거나(브라우저 전체를 닫지 말고, 브라우저 전체를 닫으면 쿠키도 유효하지 않습니다), 새 탭을 열고 페이지를 새로고침하면 4개의 Iframe이 정상적으로 4번 깜박입니다.
클릭하면 " "이 iframe 광고를 삭제하려면 여기를 클릭하세요." 새 페이지로 이동하여 쿠키를 삭제한 다음 돌아와서 Iframe의 플래시가 잘못 배치되어 있음을 확인하세요.
다음 단계로 돌아가지 않고 쿠키를 작성하거나 쿠키를 삭제하는 경우 브라우저에서 URL을 통해 직접 접속하면 Dislocation이 발생합니다
간단한 분석 및 해결
Firefox가 반환되면 Javascript가 다시 실행되지만 src에 따라 Iframe이 다시 로드되지 않는 것 같습니다. 속성이지만 Iframe과 src는 비슷한 번호로 쌍을 이루고 있으며 반환 시 Javascript를 실행하면 하나 이상의 Iframe이 생성되어 후속 쌍이 잘못 정렬되기 때문입니다.
위 내용은 추측일 뿐이며 이는 실제로 Firefox(2.0.0.3)의 버그입니다. IE가 반환되면 Javascript가 다시 실행되고 src를 기준으로 Iframe이 다시 실행되지 않습니다. Opera가 반환되면 페이지가 변경되지 않습니다.
해결책은 텍스트에 숨겨진 Iframe을 추가하여 공간을 차지하는 것입니다.
document.write('<p id="addAd"><a href="cookie.html">点击这里增加一个iframe</a></p>'); //把上面的代码修改成为 document.write('<iframe src="#" style="display:none;"></iframe>'); document.write('<p id="addAd"><a href="cookie.html">点击这里增加一个iframe</a></p>');