ifream爱恨情缘

时间:2021-11-03 02:36:30

开幕场景

iframe.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>无标题文档</title>
  6. </head>
  7. <body>
  8. <a href="javascript:;" onclick="return getIframeDocument()">get iframe input value</a>
  9. <div class="content" id="content">
  10. <iframe scrolling="no" frameborder="0" src="inner.html" class="comnet" name="comnet" id="comnet"></iframe>
  11. </div>
  12. <script type="text/javascript">
  13. function getIframeDocument(){
  14. var iframe = document.getElementById('comnet');
  15. var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
  16. if(iframeDocument){
  17. alert(iframeDocument.getElementById('first').value);
  18. }else{
  19. alert("oops!");
  20. }
  21. return false;
  22. }
  23. window.onload=function(){
  24. //取iframe
  25. var iframe = document.getElementById('comnet');
  26. var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
  27. if(iframeDocument){
  28. alert(iframeDocument.getElementById('first').value);
  29. }else{
  30. alert("oops!");
  31. }
  32. };
  33. </script>
  34. </body>
  35. </html>

inner.html

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>this is iframe document</title>
  6. </head>
  7. <body>
  8. <div id="mainright">ddd</div>
  9. <div><input type="text" id="first" value="ccc"/></div>
  10. </body>
  11. </html>

对白一:chrome我有我的要求
首先把上面的两个html放在非host上,也就是用file:///{path}/iframe.html来访问,当然inner.html也要和它在平级目录,你发现javascript不工作,
Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match.

但当他们放到一个站点内它又满血复活.

原因: Chrome会把本地iframe 也当成是跨域

对白二: ie我会72变
在ie6和ie7中对contentDocument不支持,还好ie的版本都支持contentWindow,frames  因此需要下面的代码:

  1. iframe.contentDocument || iframe.contentWindow.document

但ie10(我的电脑只有ie10)和firefox都可以在用file:///{path}/iframe.html来访问。另外如果把上面的js换成

  1. var iframe = window.frames["comnet"];
  2. if(iframe.document){
  3. alert(iframe.document.getElementById('first').value);
  4. }else{
  5. alert("oops!");
  6. }

发现在ie10中,上面的代码在window.onload事件处理函数中是没有任何效果的。是代码有问题吗?但把它们放到getIframeDocument函数中它又可以工作

对白三: firefox我忠贞如一
上面的ie10问题,chrome问题,在firefox上都没问题