为了优化我的页面,我想推迟对 javascript 的解析。我将下面的代码放在我的 facebook 类似框的页面的头部:
<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "http://connect.facebook.net/en_US/all.js#xfbml=1";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
现在在 Google Chrome 和 Mozilla 上运行良好,但在 Internet Explorer 上不显示类似框。
请问我该如何解决
最佳答案
我见过的所有脚本加载器都将脚本元素附加到第一个 head 标签,而不是像 this description 中所示的 body 标签。 .
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'http://connect.facebook.net/en_US/all.js#xfbml=1';
head.appendChild(script);
我不能说这是否是导致您在 IE 上出现问题的原因,但似乎值得更改。
此外,由于您正在等待窗口加载事件,您是否意识到在页面上的最后一个图像完成下载之前不会加载此脚本。这比您等待的时间要长得多。
据我所知,如果在加载内容后加载 FB 脚本,IE 将无法正常工作。即使你把它放在传统脚本标签中的内容之后,它在 IE 中也不起作用。这一定是关于 facebook 脚本在 IE 中的工作方式。对不起,我帮不上忙了。你可以看到即使这在 IE8 中也不起作用:
<div id="fb-root"></div><fb:like-box href="http://facebook.com/pages/MyJobMag/165211540158300" width="336" show_faces="false" stream="false" header="true" colorscheme="light"></fb:like-box>
<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>
但是,这在 IE8 中确实有效:
附言您的 HTML 中的 URL 后面有一个无关的分号,但删除它似乎并不能解决问题。
关于javascript - 延迟解析 javascript 后,脚本不会在 IE 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7129329/