IE11脚本onload不工作(有时)

时间:2014-12-11 00:07:32

标签: javascript onload

我目前正在开发一个数据密集型Web应用程序,它经常与外部API通信,并在返回时检索JSONP数据。该脚本依赖于名为head.js v1.0.3的库。 http://headjs.com/要做到这一点。但是,我注意到在IE 11中由于某种原因,脚本的onload事件有时(但不总是)在脚本实际加载到浏览器之前触发。无论是否使用head.js,行为都是可证明的。或者,我可以使用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
}

1 个答案:

答案 0 :(得分:0)

经过一些研究后,似乎绕过这个bug的唯一方法就是修改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
}