URL: canParse() 静态方法

Baseline 2023
新推出

自 ⁨2023 年 12 月⁩起,此功能可在最新的设备和浏览器版本上使用。此功能可能无法在较旧的设备或浏览器上使用。

注意:此功能在 Web Workers 中可用。

URL 接口的 URL.canParse() 静态方法返回一个布尔值,指示一个绝对 URL,或一个与基础 URL 结合的相对 URL 是否可以解析且有效。

这是在 try...catch 块中构建 URL 的一种快速简便的替代方法。它对于 URL() 构造函数 会成功解析的相同值返回 true,对于会导致构造函数抛出错误的那些值返回 false

语法

js
URL.canParse(url)
URL.canParse(url, base)

参数

url

一个字符串或任何其他带有 字符串转换器的对象 — 包括,例如,一个 <a><area> 元素 — 代表一个绝对或相对 URL。如果 url 是一个相对 URL,则 base 是必需的,并将被用作基础 URL。如果 url 是一个绝对 URL,则给定的 base 将被忽略。

base 可选

一个字符串,表示在 url 是相对 URL 时要使用的基础 URL。如果未指定,则默认为 undefined

注意: urlbase 参数将通过字符串转换器从您传入的任何值进行转换,就像其他接受字符串的 Web API 一样。特别地,您可以将现有的 URL 对象用于任一参数,它将被转换为对象的 href 属性。

返回值

如果 URL 可以解析且有效,则返回 true;否则返回 false

示例

这个实时示例演示了如何为几个不同的绝对和相对 URL 值使用 URL.canParse() 静态方法。

示例的第一部分定义了一个用于记录输出的 HTML <pre> 元素,以及一个名为 log() 的记录方法。

html
<pre id="log"></pre>
js
const logElement = document.getElementById("log");
function log(text) {
  logElement.innerText += `${text}\n`;
}

接下来,我们使用条件 "canParse" in URL 来检查 URL.canParse() 方法是否受支持。如果该方法受支持,我们将记录检查绝对 URL、没有基础 URL 的相对 URL 以及具有有效基础 URL 的相对 URL 的结果。我们还将记录 URL.canParse() 不受支持的情况。

js
if ("canParse" in URL) {
  log("Test valid absolute URL");
  let url = "https://mdn.org.cn/";
  let result = URL.canParse(url);
  log(` URL.canParse("${url}"): ${result}`);

  log("\nTest relative URL with no base URL");
  url = "/en-US/docs";
  result = URL.canParse(url);
  log(` URL.canParse("${url}"): ${result}`);

  log("\nTest relative URL with valid base URL");
  let baseUrl = "https://mdn.org.cn/";
  result = URL.canParse(url, baseUrl);
  log(` URL.canParse("${url}","${baseUrl}"): ${result}`);
} else {
  log("URL.canParse() not supported");
}

最后,下面的代码显示 baseUrl 不必是字符串。在这里,我们传递了一个 URL 对象。

js
if ("canParse" in URL) {
  log("\nTest relative URL with base URL supplied as a URL object");
  let baseUrl = new URL("https://mdn.org.cn/");
  let url = "/en-US/docs";
  result = URL.canParse(url, baseUrl);
  log(` URL.canParse("${url}","${baseUrl}"): ${result}`);
}

每个检查的结果如下所示。

规范

规范
URL
# dom-url-canparse

浏览器兼容性

另见