昨天发了个贴关于异步加载js的问题,这个问题解决了。现在问题又有了,由于我是异步加载了js,js里是动态生成了一个div。但是由于是异步加载,这个创建的div没有显示的原来的位置。例如我页面中是
<div>
<script>
var div = document.createElement("div");
div.setAttribute("id","adunion_html_id");
//div.style.width="auto";
// div.style.height="auto";
document.body.appendChild(div);
var adunion_id = "1";
(function(){
var ad = document.createElement("script");
ad.type="text/javascript";
ad.charset="utf-8";
ad.async = true;
ad.src="http://union.51g3.com/adunion.js";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(ad,s);
})();
</script>
</div>
我在页面异步加载js之前,想预先占留一个位置,异步加载之后读出内容到这个div。现在由于创建的div被加到了body的子节点,document.body.appendChild(div);所以无法在加在div内,导致变形。但是又因为无法确认要加的父节点。因为我有很多不同页面要加上这段代码,有的可能是在table里,所以无法像非异步那样直接输出页面占留位置。有没有一种比较好的解决方案?可以实现像非异步加载那样不变形。
<div>
<script>
var div = document.createElement("div");
div.setAttribute("id","adunion_html_id");
//div.style.width="auto";
// div.style.height="auto";
document.body.appendChild(div);
var adunion_id = "1";
(function(){
var ad = document.createElement("script");
ad.type="text/javascript";
ad.charset="utf-8";
ad.async = true;
ad.src="http://union.51g3.com/adunion.js";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(ad,s);
})();
</script>
</div>
我在页面异步加载js之前,想预先占留一个位置,异步加载之后读出内容到这个div。现在由于创建的div被加到了body的子节点,document.body.appendChild(div);所以无法在加在div内,导致变形。但是又因为无法确认要加的父节点。因为我有很多不同页面要加上这段代码,有的可能是在table里,所以无法像非异步那样直接输出页面占留位置。有没有一种比较好的解决方案?可以实现像非异步加载那样不变形。
解决方案 »
- jquery及ajax 都验证通过 为什么这个方法最后返回false,急死了
- 如何重写 alert,confirm,prompt
- 关于GET和POST的问题
- 那个大哥美女给我推荐一款javascript的IDE啊
- 请教高手,ie6问题
- 在服务器上找不到脚本语言 'JAVASCRIPT'
- 显示客户端图片,就是input type=file选择图片时就会把要上传的图片先显示出来。
- javascript有将字符型转换成数据型的函数吗?
- 不爽
- 如何将JAVA SCRIPT中的数组传入ActiveX中!
- 输入框输入汉字时,如何不让输入框中显示拼音字母
- 原生js实现3d自由摄像机(Free camera)
}
然后让script的回调函数指向它就好了,然后在里面吧你读出来的内容写到你的DIV里的
<html>
<head>
</head>
<body>
</body>
<script type="text/javascript" onload="alert(1)">
var div = document.createElement("div");
div.setAttribute("id", "adunion_html_id");
//div.style.width="auto";
// div.style.height="auto";
document.body.appendChild(div);
var adunion_id = "1";
(function () {
var ad = document.createElement("script");
ad.type = "text/javascript";
ad.charset = "utf-8";
if (window.navigator.userAgent.indexOf("MSIE") >= 1)
//如果浏览器为IE
{
var it = setInterval(function () {
if (ad.readyState == "complete") {
clearInterval(it);
div.innerHTML =a;
}
}, 200);
}
else //如果浏览器为Firefox
{
if (window.navigator.userAgent.indexOf("Firefox") >= 1) {
ad.onload = function () {
div.innerHTML = a;
}
}
}
ad.async = true;
ad.src = "test.js";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(ad, s);
})();
</script>
</html>
test.js
var a ="你好";不同的浏览器对JS的加载完成是不一样的。
这个方法也是某些JS框架的jsonp请求的原理。