首页 > 解决方案 > 如何访问 web_sys 中的导航器或其他基于 Web 的资源?

问题描述

最近我阅读了 Rust 的文档,现在我决定尝试使用 web_sys API。我正在尝试使用Navigator::do_not_track吸气剂......好吧,更具体地说,我想打印返回值。根据文档,这是 getter 的签名:

pub fn do_not_track(&self) -> String

如果我理解正确,我应该能够使用format!宏:

format!("{}", Navigator::do_not_track);

毫无疑问,我已经正确导入了 Navigator API。错误是:

error[E0277]: `for<'r> fn(&'r web_sys::features::gen_Navigator::Navigator) -> std::string::String {web_sys::features::gen_Navigator::Navigator::do_not_track}` doesn't implement `std::fmt::Display`
  --> src/lib.rs:19:19
   |
19 |     format!("{}", Navigator::do_not_track);
   |                   ^^^^^^^^^^^^^^^^^^^^^^^ `for<'r> fn(&'r web_sys::features::gen_Navigator::Navigator) -> std::string::String {web_sys::features::gen_Navigator::Navigator::do_not_track}` cannot be formatted with the default formatter
   |
   = help: the trait `std::fmt::Display` is not implemented for `for<'r> fn(&'r web_sys::features::gen_Navigator::Navigator) -> std::string::String {web_sys::features::gen_Navigator::Navigator::do_not_track}`
   = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
   = note: required by `std::fmt::Display::fmt`
   = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

如果我尝试使用web_sys::navigator,我会得到

could not find "navigator" in "web_sys"

如何使用 访问网络导航器 API web_sys

标签: rustwebassembly

解决方案


请注意,这Navigator::do_not_track是一个方法,这意味着Navigator需要首先检索类型的值。混淆的一个可能来源是没有找到如何创建它。

在支持 DOM 的 JavaScript 环境中,作为全局变量找到的大多数 Web 资源都可以通过该Window资源获得。你需要:

  1. 通过启用相应的 Cargo 功能确保预期资源处于活动状态:
web_sys = { version = "0.3", features = ["Navigator, Window"] }
  1. 通过 检索全局窗口web_sys::window,检查它是否可用。

  2. 您最终可以通过一种可用的 getter 方法 ( window.navigator()) 检索预期的资源。

编码:

let window = web_sys::window().expect("Missing Window");

let navigator = window.navigator();

let do_not_track = navigator.do_not_track();

也可以看看:


推荐阅读