使用JavaScript动态加载JavaScript
经过一个多小时的尝试,我认为这是因为跨域策略,但我真的认为这会起作用。我也找不到很多关于它的信息。但是,这是我的问题。我有一个名为的网站,然后我包括一个第三方脚本(我写的东西)和它的at,这个脚本需要在运行之前动态加载googlemapsapi。好吧,我想这段代码可以用:使用JavaScript动态加载JavaScript,javascript,security,api,google-maps-api-3,xss,Javascript,Security,Api,Google Maps Api 3,Xss,经过一个多小时的尝试,我认为这是因为跨域策略,但我真的认为这会起作用。我也找不到很多关于它的信息。但是,这是我的问题。我有一个名为的网站,然后我包括一个第三方脚本(我写的东西)和它的at,这个脚本需要在运行之前动态加载googlemapsapi。好吧,我想这段代码可以用: function loadScript(filename,callback){ var fileref=document.createElement('script'); fileref.setAttribute("t
function loadScript(filename,callback){
var fileref=document.createElement('script');
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filename);
fileref.onload = callback();
if (typeof fileref!="undefined"){
document.getElementsByTagName("head")[0].appendChild(fileref)
}
}
loadScript('http://maps.google.com/maps/api/js?sensor=false',function(){
console.log('done loading');
init();
});
但我在控制台中的回答是:
api.js:408 done loading
api.js:115 test
api.js:310 Uncaught ReferenceError: google is not defined
“test
”位于init()的顶部。所以,它正在加载脚本,但似乎没有执行它。有什么想法吗?如果这是一个跨站点脚本问题,我能想到的唯一解决方法就是在我们的终端上安装一个PHP脚本,它基本上只是将头设置为文本/javascript头,然后将echo file\u get\u contents()
设置为我们托管的googlemaps.PHP
文件。正如我们所说的,我们将尝试这个方法,但是,如果可能的话,用纯JS实现它的方法将非常棒
另外,我还尝试添加jQuery,然后执行getScript()
,但仍然不起作用
--更新--
看这把小提琴:
您将在控制台中看到错误:
未捕获类型错误:未定义不是函数
尽管google
变量是全局变量。但您只有一个小错误:
fileref.onload = callback();
这将立即调用回调
,并将其返回值分配给fileref.onload
应该是
fileref.onload = callback;
您还应该在设置源之前添加处理程序(以防万一)