2011-04-29 141 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