2014-12-11 89 views
2

我目前正在研究一個數據密集型Web應用程序,該應用程序經常與外部API進行通信,並在返回時檢索JSONP數據。該腳本依賴於名爲head.js v1.0.3的庫。 http://headjs.com/來完成這個。但是,我注意到,在IE 11中,出於某種原因,腳本的onload事件有時(但並非總是)在腳本實際加載到瀏覽器之前觸發。該行爲可以證明是否使用head.js。或者,我可以創建一個腳本元素,並設置onload事件來捕獲返回的數據。有時它起作用,有時不起作用。更奇怪的是,一旦它第一次發生,它似乎在瀏覽器會話期間繼續發生。IE11腳本onload不工作(有時)

解決方法的任何想法?

下面是一些示例代碼:

//somejson.js 
/* 
    window["queryResult"] = {blah:'blah'} 
*/ 

function loadScript() { 
    head.load("/somejson.js", afterScriptLoad) 
} 

function afterScriptLoad() { 
    var result = queryResult 
    //Throws error because window.queryResult is sometimes undefined 
} 
+0

當你在調用'loadScript'之前聲明'afterScriptLoad',或者只是將它作爲一個匿名函數傳遞的時候它會工作嗎? – GolezTrol 2014-12-11 00:21:08

+0

同樣的事情發生在匿名函數中。我想我想出了一個解決方法。這並不理想,但如果它有效,我會在稍後發佈詳情。 – 2014-12-11 17:29:05

+0

我也遇到過這個問題。似乎跨域js請求不會在ie 11中發送onload事件。 – cocoa 2017-12-12 03:21:43

回答

0

的一點點研究後,似乎解決這個錯誤的唯一方法是修改API,以便一旦變量持有JSONP被初始化,腳本本身觸發回調。不幸的是,如果他們無法修改正在使用的任何API,則這不會成爲其他人的解決方案,但它確實爲我解決了問題。

//somejson.js 
/* 
    window["queryResult"] = {blah:'blah'}; scriptCallback() 
*/ 
function loadScript(callback) { 
    var c = new afterScriptLoad(callback) 
    window["scriptCallback"] = c 
    head.load("/somejson.js", c) 
} 
function afterScriptLoad(callback) { 
    var retrieved = false 
    return function() { 
     if (!retrieved) { 
      retrieved = true 
      callback(queryResult) 
     } 
    } 
} 
function myCallback(response) { 
    //do something 
}