经过一个多小时试图让它工作我认为这是因为跨域政策,但我真的认为这会有效。我也找不到很多关于它的信息。但是,这是我的问题。我有一个名为http://mysite.com的网站,然后我在http://supercoolsite.com/api/script.js添加了第三方脚本(我正在撰写的内容)和此脚本,此脚本需要动态加载google地图api:http://maps.google.com/maps/api/js?sensor=false之前它运行。好吧,我认为这段代码可行:
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脚本,它基本上只是将标题设置为text / javascript标题,然后将echo file_get_contents()
设置为{{1}我们托管的文件。在我们发言时即将尝试这一点,但是,如果可能的话,使用纯JS来实现它将是非常棒的。
P.S。我也尝试添加jQuery,然后执行googlemaps.php
,它仍然没有工作
- 更新 -
看到这个小提琴: http://jsfiddle.net/ycMCa/2/
您会在控制台中看到错误:
getScript()
尽管Uncaught TypeError: undefined is not a function
变量是全局的。
答案 0 :(得分:7)
你只是有一个小错误:
fileref.onload = callback();
这会立即致电callback
并将其返回值分配给fileref.onload
。
应该是
fileref.onload = callback;
您还应该在设置源代码之前添加处理程序(以防万一)。