Discuz教程网

JS获取iframe元素及跨域访问操作

[复制链接]
authicon dly 发表于 2012-2-15 22:50:44 | 显示全部楼层 |阅读模式
最近需要用到对iframe内子元素的控制。
iPage.html,<body>里dom:
  1. <iframe id="iId" name="iName" src="srcPage.html" scrolling="no" frameborder="0"></iframe>
复制代码


srcPage.html,<body>里dom:

  1. <h1>妹妹的一天</h1>
  2. <p>早上吃早点,中午约会吃饭,下午K歌,晚上和哥哥瞎折腾</p>
复制代码


下面讨论ie下JS是怎么操作以上两个页面,再讨论firefox的做法,最后给出兼容ie,firefox浏览器操作iframe对象的方法。
一、ie下访问操作iframe里内容大家都知道iframe是非标准html标签,它是由ie浏览器推出的多布局标签, 随后Mozilla也支持了这个标签。(闲话,嘿嘿)
1. ie通过document.frames["IframeName"]获取它,例子:我们在iPage.html里输出srcPage.html里h1的内容,JS如下:

  1. alert(document.frames["iName".document.getElementsByTagName('h1')[0.firstChild.data);
复制代码

你会发现这样在页面里加入代码,好像并没有输出想要的东东,为什么呢?这个我也没有搞清楚,只是习惯性的加入了window.onload就有输出了(注:JS代码都写到这个事件里去),知道的人士可否告诉我下。why?更改之后代码ie下有了输出,firefox下document.frames 没有定义错误提示:


  1. window.onload = (function () {
  2. alert(document.frames["iName".document.getElementsByTagName('h1')[0.firstChild.data);
  3. });
复制代码
2. ie另一种方法contentWindow获取它,代码:


  1. window.onload = (function () {
  2. var iObj = document.getElementById('iId').contentWindow;
  3. alert(iObj.document.getElementsByTagName('h1')[0.firstChild.data);
  4. });
复制代码
此方法经过ie6,ie7,firefox2.0,firefox3.0测试都通过,好事啊!嘿嘿。(网上一查,发现Mozilla Firefox iframe.contentWindow.focus缓冲区溢出漏洞,有脚本注入攻击的危险。
后来听说可以在后台防止这样的事情发生,算是松了口气。不过还是希望firefox新版本可以解决这样的危险。)
3.改变srcPage.html里h1标题内容,代码:

  1. iObj.document.getElementsByTagName('h1')[0.innerHTML='我想变成她一天的一部分';
复制代码

通过contentWindow后访问里面的节点就和以前一样了。
二、firefox下访问操作iframe里内容Mozilla支持通过IFrameElmRef.contentDocument访问iframe的document对象的W3C标准,通过标准可以少写一个document,代码:


  1. var iObj = document.getElementById('iId').contentDocument;
  2. alert(iObj.getElementsByTagName('h1')[0.innerHTML='我想变成她一天的一部分');
  3. alert(iObj.getElementsByTagName('p')[0.firstChild.data);
复制代码
兼容这两种浏览器的方法,现在也出来了,就是使用contentWindow这个方法。
嘿嘿!操作iframe是不是可以随心所欲了呢?如果还觉得不爽,你甚至可以重写iframe里的内容。
三、重写iframe里的内容通过designMode(设置文档为可编辑设计模式)和contentEditable(设置内容为可编辑),你可以重写iframe里的内容。代码:


  1. var iObj = document.getElementById('iId').contentWindow;
  2. iObj.document.designMode = 'On';
  3. iObj.document.contentEditable = true;
  4. iObj.document.open();
  5. iObj.document.writeln('<html><head>');
  6. iObj.document.writeln('<style>body {background:#000;font-size:9pt;margin: 2px; padding: 0px;}</style>');
  7. iObj.document.writeln('</head><body></body></html>');
  8. iObj.document.close();
复制代码

不能跨域- -!



上一篇:利用javascript操作本地文件(读写txt文件)
下一篇:使用JS获取referer反向攻击WAP网站
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 04:57

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表