首页 新闻 搜索 专区 学院

把一段html+js赋值给一个iframe,在IE下报$未定义错误?

0
悬赏园豆:50 [已解决问题] 解决于 2012-03-02 16:55

把一段html+js赋值给一个iframe,在IE下报$未定义错误?我的代码如下:

<!DOCTYPE html>
<html>
<head>
<title>Demo</title>
<meta charset="utf-8"/>
<script type="text/javascript">
window.onload
=function(){
var data='<html>\
<head>\
<meta charset="utf-8">\
<title>Demo</title>\
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"><\/script>\
<script type="text/javascript">\
$(function(){\
alert("abc");\
});\
<\/script>\
<\/head>\
<body>\
</body>\
</html>
';
window.frames[
"code_result"].document.open();
window.frames[
"code_result"].document.write(data);
window.frames[
"code_result"].document.close();
}
</script>
</head>
<body>
<iframe id="code_result" frameborder="0" class="frame_result" name="code_result"></iframe>
</body>
</html>

在Chrome跟FireFox下均可以正常运行,请能指点一下哈!

artwl的主页 artwl | 专家六级 | 园豆:16526
提问于:2012-03-02 11:34
< >
分享
最佳答案
0

晕,这样改了就可以了:

 1 <html>
2 <head>
3 <title>Demo</title>
4 <meta charset="utf-8"/>
5 <script type="text/javascript">
6 window.onload=function(){
7 var data='<html>\
8 <head>\
9 <meta charset="utf-8">\
10 <title>Demo</title>\
11 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"><\/script>\
12 <script type="text/javascript">\
13 $(function(){\
14 alert("abc");\
15 });\
16 <\/script>\
17 <\/head>\
18 <body>\
19 </body>\
20 </html>';
21 var data1='<html>\
22 <head>\
23 <meta charset="utf-8">\
24 <title>Demo</title>\
25 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"><\/script>';
26 var data2='<script type="text/javascript">$(function(){alert("abc");});<\/script>\
27 <\/head>\
28 <body>\
29 </body>\
30 </html>';
31 window.frames["code_result"].document.open();
32 window.frames["code_result"].document.write(data1);
33 window.frames["code_result"].document.write(data2);
34 window.frames["code_result"].document.close();
35 } </script>
36 </head>
37 <body>
38 <iframe id="code_result" frameborder="0" class="frame_result" name="code_result"></iframe>
39 </body>
40 </html>

在IE 6 中通过,最主要是写的时候分开写。

收获园豆:50
ChatinCode | 老鸟四级 |园豆:2272 | 2012-03-02 16:37

上面的代码还是有缺陷, 会alert两次, 改成这样可以:

 1 <html>
2 <head>
3 <title>Demo</title>
4 <meta charset="utf-8"/>
5 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
6 <script type="text/javascript">
7 window.onload=function(){
8 var iframe = document.createElement('iframe');
9 iframe.frameBorder="0";
10 document.body.appendChild(iframe);
11 var data='<html>\
12 <head>\
13 <meta charset="utf-8">\
14 <title>Demo</title>\
15 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"><\/script>\
16 <script type="text/javascript">\
17 $(function(){\
18 alert("abc");\
19 });\
20 <\/script>\
21 <\/head>\
22 <body>\
23 </body>\
24 </html>';
25 var data1='<html>\
26 <head>\
27 <meta charset="utf-8">\
28 <title>Demo</title>\
29 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"><\/script>';
30 var data2='<script type="text/javascript">$(function(){alert("abc");});<\/script>\
31 <\/head>\
32 <body>\
33 </body>\
34 </html>';
35 var resultDoc = getiFrameDocument(iframe);
36 //resultDoc.write(data);
37 resultDoc.write(data1);
38 resultDoc.write(data2);
39 resultDoc.close();
40 function getiFrameDocument(iframe){
41 if(typeof iframe =='string'){
42 iframe = document.getElementById(iframe);
43 }
44 iframe.removeAttribute('src');
45 return iframe.contentDocument || (iframe.contentWindow ? iframe.contentWindow.document : iframe.document);
46 }
47 }
48 </script>
49 </head>
50 <body>
51 <iframe id="code_result" frameborder="0" class="frame_result" name="code_result"></iframe>
52 </body>
53 </html>



ChatinCode | 园豆:2272 (老鸟四级) | 2012-03-02 16:46

@ChatinCode: 

这样果然可以,可以解释一下吗?

artwl | 园豆:16526 (专家六级) | 2012-03-02 16:56

@ChatinCode: 怎么没有修改的,上面的<iframe>...</iframe>多余了。最前面的IE6下刷新了一下,变成alert()两次了。

ChatinCode | 园豆:2272 (老鸟四级) | 2012-03-02 16:57

@artwl: 我也不知道,应该是IE6的bug吧, 他的引擎有问题吧,是不是因为把那两个<script>分开了所以加载了,没分开时,不能在一句里面解释两个。我胡乱猜测的,毕竟不懂它的内部实现。

ChatinCode | 园豆:2272 (老鸟四级) | 2012-03-02 17:00
其他回答(2)
0
 $(function(){\  alert("abc");\}); 这个是jquery的方法,说明你没有引入jquery。
呦菜 | 园豆:2 (初学一级) | 2012-03-02 11:52

有引入啊,在这里:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"><\/script>\
支持(0) 反对(0) artwl | 园豆:16526 (专家六级) | 2012-03-02 11:53
0

在两个页面都引入jQuery,IE下找不到这个文件。因为在你动态创建时,IE是没有加载到的。

az235 | 园豆:8283 (大侠五级) | 2012-03-02 12:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册