LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 372|回复: 0

资源加载:onload,onerror

[复制链接]
发表于 2024-1-16 15:02:00 | 显示全部楼层 |阅读模式
浏览器允许我们跟踪外部资源的加载 —— 脚本,iframe,图片等。

这里有两个事件:

onload —— 成功加载,
onerror —— 出现 error。
加载脚本
假设我们需要加载第三方脚本,并调用其中的函数。

我们可以像这样动态加载它:

let script = document.createElement('script');
script.src = "my.js";

document.head.append(script);
……但如何运行在该脚本中声明的函数?我们需要等到该脚本加载完成,之后才能调用它。

请注意:
对于我们自己的脚本,可以使用 JavaScript module,但是它们并未被广泛应用于第三方库。

script.onload
我们的得力助手是 load 事件。它会在脚本加载并执行完成时触发。

例如:

let script = document.createElement('script');

// 可以从任意域(domain),加载任意脚本
script.src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.js"
document.head.append(script);

script.onload = function() {
  // 该脚本创建了一个变量 "_"
  alert( _.VERSION ); // 显示库的版本
};
因此,在 onload 中我们可以使用脚本中的变量,运行函数等。

……如果加载失败怎么办?例如,这里没有这样的脚本(error 404)或者服务器宕机(不可用)。

script.onerror
发生在脚本加载期间的 error 会被 error 事件跟踪到。

例如,我们请求一个不存在的脚本:

let script = document.createElement('script');
script.src = "https://example.com/404.js"; // 没有这个脚本
document.head.append(script);

script.onerror = function() {
  alert("Error loading " + this.src); // Error loading https://example.com/404.js
};
请注意,在这里我们无法获取更多 HTTP error 的详细信息。我们不知道 error 是 404 还是 500 或者其他情况。只知道是加载失败了。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表