2011-04-29 91 views
4

经过一个多小时的努力,我认为这是因为跨域策略,但我真的认为这会工作。我也找不到很多信息。但是,这是我的问题。我有一个名为http://mysite.com的网站,然后我添加了第三方脚本(即时编写内容)及其http://supercoolsite.com/api/script.js,并且此脚本需要在运行之前动态加载google maps api:http://maps.google.com/maps/api/js?sensor=false。好了,我想这代码将工作:用JavaScript动态加载JavaScript

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_get_contents()设置为我们托管的googlemaps.php文件。我们说的时候要试试这个,但是,如果可能的话,一个用纯JS实现的方法会很棒。

P.S.我也尝试添加了jQuery,然后做getScript(),它仍然没有工作

- 更新 -

看到这个小提琴: http://jsfiddle.net/ycMCa/2/

你会看到在您的控制台得到错误: Uncaught TypeError: undefined is not a function

尽管google变量是全局变量。

回答

7

你只是有一个小错误:

fileref.onload = callback(); 

这将立即拨打callback并分配返回值fileref.onload

应该

fileref.onload = callback; 

你你设置源(以防万一)之前还应该添加的处理程序。

DEMO