2

我必须做跨域ajax,所以我尝试了jsonp。

然后我将不得不script动态地将元素添加到页面中,但是我无法检查它的状态。

在 firefox/chrome/ie8+ 我可以使用

script.onLoad=function(){}
script.onError=function(){}

我也试过

script.onreadystatechange=function(){}

在即<8。

但它不适用于ie<8。

如何让它发挥作用?

顺便说一句,我想使用本机 javascript 来制作它,所以不要告诉我使用 jQuery 或其他任何东西。


更新:

事实上,我从服务器请求的脚本不是一个库,它只是一行 javascript 代码(jsonp)。所以我不能用定时器来检查。

4

3 回答 3

2

查看yepnope.js,它同时使用两者onloadonreadystatechange但它使用超时循环来检查readystate脚本元素的属性,请参见此处

于 2012-09-25T00:36:26.137 回答
2

对于 IE,考虑检查负载是否发生的替代方法,例如在您的脚本文件中添加该行

script_myScriptUniqueName_loaded = true;

然后在动态添加中,如果script.onload不存在null(在设置回调之前)用于window.setInterval检查是否存在script_myScriptUniqueName_loaded,超时抛出错误,如果存在则调用回调。
完成后记得window.clearInterval做。

于 2012-09-25T00:37:51.800 回答
1

脚本元素的load事件是在 HTML5 中引入的,在此之前它仅适用于框架集和正文元素(尽管大多数浏览器也为 img 元素实现了它)。所以如果你想支持早期的浏览器,你需要有创意。

一种解决方案是在脚本顶部放置一个函数调用来表示脚本已加载,因为浏览器在脚本完全加载之前不应执行脚本中的任何代码。

另一种是在第一个脚本之后立即插入带有“我已加载”功能或标志的第二个脚本,假设第二个脚本在第一个被加载和执行之前不会被执行。

于 2012-09-25T00:38:31.777 回答