位置 API
Deno 支持来自 web 的 location
全局变量。请继续阅读。
位置标志 跳转到标题
没有“网页”的 URL 可以用于 Deno 进程中的位置。我们允许用户通过使用 --location
标志在 CLI 上指定一个来模拟文档位置。它可以是 http
或 https
URL。
// deno run --location https://example.com/path main.ts
console.log(location.href);
// "https://example.com/path"
您必须传递 --location <href>
才能使其工作。如果您没有,任何对 location
全局变量的访问都会抛出错误。
// deno run main.ts
console.log(location.href);
// error: Uncaught ReferenceError: Access to "location", run again with --location <href>.
设置 location
或其任何字段通常会导致浏览器中的导航。这在 Deno 中不适用,因此在这种情况下会抛出错误。
// deno run --location https://example.com/path main.ts
location.pathname = "./foo";
// error: Uncaught NotSupportedError: Cannot set "location.pathname".
扩展使用 跳转到标题
在 web 上,资源解析(不包括模块)通常使用 location.href
的值作为根,以作为所有相对 URL 的基础。这会影响 Deno 采用的某些 web API。
Fetch API 跳转到标题
// deno run --location https://api.github.com/ --allow-net main.ts
const response = await fetch("./orgs/denoland");
// Fetches "https://api.github.com/orgs/denoland".
如果未传递 --location
标志,上面的 fetch()
调用将抛出错误,因为没有 web 类比位置可以作为其基础。
工作模块 跳转到标题
// deno run --location https://example.com/index.html --allow-net main.ts
const worker = new Worker("./workers/hello.ts", { type: "module" });
// Fetches worker module at "https://example.com/workers/hello.ts".
仅在必要时使用 跳转到标题
对于上述用例,最好传递完整的 URL,而不是依赖 --location
。如果需要,您可以使用 URL
构造函数手动设置相对 URL 的基础。
--location
标志旨在用于那些对模拟文档位置有特定目的的人,并且意识到这只会对应用程序级别起作用。但是,您也可以使用它来消除依赖项从 location
全局变量中随意访问而产生的错误。