无法动态加载JS(没有jQuery)

时间:2011-11-05 12:09:53

标签: javascript html code-injection

我使用此代码,但javascript未加载。

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
var prefix = this.is_current_https ? "https://" : "http://";
script.type = 'text/javascript';
script.onload = fnCustomHandler;
script.src = prefix + 'apis.google.com/js/plusone.js';
head.appendChild(script);

甚至没有收听script.onreadystatechange正在产生任何输出。

当我调试console.log(script)时,我看到正确创建了整个元素,但未加载引用的脚本。

我也试过head.appendChild(script.cloneNode(true));

备注

  • 在document.onload
  • 之后
  • in google chrome
  • 控制台中没有错误

备注2

在@ john_doe评论中发现,脚本代码被注入页面(进入html-> head),但未加载(如网络中所示)标签)。是什么导致这种情况?

2 个答案:

答案 0 :(得分:2)

它说它加载了一个对象:

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
var prefix = this.is_current_https ? "https://" : "http://";
script.type = 'text/javascript';
script.onload = function () {
    alert('typeof window.gapi.plusone === ' + typeof window.gapi.plusone); // this
};
script.src = prefix + 'apis.google.com/js/plusone.js';
head.appendChild(script);

答案 1 :(得分:1)

我试过了,错误是fnCustomHandler未完成,如果我把它的那条线完全加载。

编辑 - 我试过

var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
var prefix = this.is_current_https ? "https://" : "http://";
script.type = 'text/javascript';
script.onload = function(){
alert('hi');
};
script.src = prefix + 'apis.google.com/js/plusone.js';
head.appendChild(script);

并且它可以正常运行,因此您的功能一定存在问题