IE document.write问题

amu9900 2011-08-08 03:10:50
IEdocument.write和FF、chrome浏览器不一样
----
index.html:
----
<script type="text/javascript">
document.write('<script type="text/javascript" src="/temp/define.js"><'+'/script>')
document.write('<script type="text/javascript">alert(a);<'+'/script>')
</script>

----
define.js
----
var a=1;


这个在FF和chrome下面都没问题,但是在IE下面就出现问题了。。这是由于IE加载document.write里面的src="xx.js"和其他浏览器不一样引起的。

有大神遇到并解决过类似问题么?
我看到有重写write方法解决的,但是代码拉下来跑不通。。。

跪求大神解决。。。。
...全文
540 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
amu9900 2012-10-15
  • 打赏
  • 举报
回复
不行啊不行……难道只能用传说中无限循环等待监听……
我不想这么ugly啊……
jzshmyt 2012-06-16
  • 打赏
  • 举报
回复
用服务器端语言写
<%
out.println("<script type=\"text/javascript\" src=\"/temp/define.js\"><\/script>")
%>
hnshn 2012-06-16
  • 打赏
  • 举报
回复
把alert(a);也放入一个单独js文件中,使用document.write()调用就可以了。
amu9900 2011-08-10
  • 打赏
  • 举报
回复
动态导入貌似行不同,因为还是没法确定js源文件被加载下来才会执行下面的的js代码

include方法也只是去穿件了个script标签,然后取加载src文件

简单说,IE测试貌似还是不行
lzh_me 2011-08-09
  • 打赏
  • 举报
回复
动态导入,学习了..
hch126163 2011-08-09
  • 打赏
  • 举报
回复
// 动态导入js
function include(src,encoding,fun)
{
var s = document.createElement('script');
s.type='text/javascript';
s.charset=encoding; //'gb2312';
s.src = src;
var tags =document.getElementsByTagName('head');
if(typeof(fun)=='function'){
if( document.all ){
s.onreadystatechange = function(){
if(/(complete|loaded)/.test(this.readyState)){
fun(); s.onreadystatechange = null; s.parentNode.removeChild(s);
}};
}else{
s.onload = function(){ fun(); s.onload = null; s.parentNode.removeChild(s); };
}
}
tags[0].appendChild(s);
};
阳明 to life 2011-08-08
  • 打赏
  • 举报
回复
如1楼所说用createElement
var _script = document.createElement("script");

_script .type = "text/javascript";

_script .src = "js.js";

document.getElementsByTagName("head")[0].appendChild(_script);
豆虫 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 amu9900 的回复:]

上面已经是我抽象的需求……
原版需求是这样的,老板的ga代码存在数据库的(用户输入的不能确定是否是老板ga代码),现在前台拿到后台传到前台的ga代码(字符串),要将其运行,最简单的办法就是document.write写到document对象里面,但是ga的代码分两段,第一段又document.write另外一个源,第二段有个对象是第一段引用的源里面生成的。

绕晕了没?唉。。。简单点说,我……
[/Quote]
真有点~~~帮顶了~~~
ZXY900213 2011-08-08
  • 打赏
  • 举报
回复
var browser = new (function () {
this.Opera = window.opera ? true : false;
this.IE = document.all && !this.Opera ? true : false;
this.IE6 = this.IE && typeof(window.XMLHttpRequest) == "undefined" ? true : false;
this.IE8 = this.IE && typeof(document.querySelectorAll) != "undefined" ? true : false;
this.IE7 = this.IE && ! this.IE6 && !this.IE8 ? true : false;
this.WebKit = /WebKit/i.test(navigator.userAgent) ? true : false,
this.iPhone = /iPhone|iPod/i.test(navigator.userAgent)? true : false;
this.Chrome = /Chrome/i.test(navigator.userAgent) ? true : false;
this.Safari = /Safari/i.test(navigator.userAgent) && !this.Chrome ? true : false;
this.Konqueror = navigator.vendor == "KDE" ? true : false;
this.Konqueror4 = this.Konqueror && /native code/.test(document.getElementsByClassName) ? true : false;
this.Gecko = !this.WebKit && navigator.product == "Gecko" ? true : false;
this.Gecko19 = this.Gecko && Array.reduce ? true : false;
})();

if (browser.IE || browser.WebKit || browser.Konqueror) {
document.write('<script type="text/javascript" src="/temp/define.js"><\/script>');
} else {
var script = document.createElement('script');
script.src = "/temp/define.js";
script.setAttribute('type', 'text/javascript');
document.getElementsByTagName('head')[0].appendChild(script);
}
xuexiaodong2009 2011-08-08
  • 打赏
  • 举报
回复
后台输出不知行不行
amu9900 2011-08-08
  • 打赏
  • 举报
回复
上面已经是我抽象的需求……
原版需求是这样的,老板的ga代码存在数据库的(用户输入的不能确定是否是老板ga代码),现在前台拿到后台传到前台的ga代码(字符串),要将其运行,最简单的办法就是document.write写到document对象里面,但是ga的代码分两段,第一段又document.write另外一个源,第二段有个对象是第一段引用的源里面生成的。

绕晕了没?唉。。。简单点说,我们的script为1,ga有2和3,2write4,3要用到4的对象


#下面整个是一个str,转义后太长,我就用三个引号区分了
var s ="""
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? " https://ssl." : " http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>

<script type="text/javascript">
var pageTracker = _gat._getTracker("UA-24691097-3");
pageTracker._initData();
pageTracker._trackPageview();
</script>
"""

document.write(s);#这样在FF上可以,在IE上不行。。。

乌镇程序员 2011-08-08
  • 打赏
  • 举报
回复
使用write()方法是有限制的,不如你把需求说出来,假如是想动态加载外部js文件,用createElement()方法更好。

87,915

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧