IE11 脚本加载不起作用(有时)

IE11 script onload not working (sometimes)

本文关键字:有时 不起作用 脚本 加载 IE11      更新时间:2023-09-26

我目前正在开发一个数据密集型 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
}

经过一些研究,似乎解决此错误的唯一方法是修改 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
}