web-sys
概述
web-sys
crate 具有此檔案和目錄配置
.
├── build.rs
├── Cargo.toml
├── README.md
├── src
│ └── lib.rs
└── webidls
└── enabled
└── ...
webidls/enabled/*.webidl
這些是我們實際會為其產生綁定的 WebIDL 介面 (或至少是為這些檔案中定義的某些事物產生綁定)。
build.rs
build.rs
會在 webidls/enabled
中的所有 WebIDL 檔案上調用 wasm-bindgen
的 WebIDL 前端。它將產生的綁定寫入 cargo 建置的輸出目錄。
src/lib.rs
src/lib.rs
唯一做的事情是包含在編譯時於 build.rs
中產生的綁定。以下是整個 src/lib.rs
檔案
#![allow(unused)] fn main() { //! Raw API bindings for Web APIs //! //! This is a procedurally generated crate from browser WebIDL which provides a //! binding to all APIs that browsers provide on the web. //! //! This crate by default contains very little when compiled as almost all of //! its exposed APIs are gated by Cargo features. The exhaustive list of //! features can be found in `crates/web-sys/Cargo.toml`, but the rule of thumb //! for `web-sys` is that each type has its own cargo feature (named after the //! type). Using an API requires enabling the features for all types used in the //! API, and APIs should mention in the documentation what features they //! require. #![doc(html_root_url = "https://docs.rs/web-sys/0.3")] #![no_std] #![allow(deprecated)] extern crate alloc; mod features; #[allow(unused_imports)] pub use features::*; pub use js_sys; pub use wasm_bindgen; /// Getter for the `Window` object /// /// [MDN Documentation] /// /// *This API requires the following crate features to be activated: `Window`* /// /// [MDN Documentation]: https://developer.mozilla.org/en-US/docs/Web/API/Window #[cfg(feature = "Window")] pub fn window() -> Option<Window> { use wasm_bindgen::JsCast; js_sys::global().dyn_into::<Window>().ok() } }
Cargo 功能
編譯時,此 crate 預設幾乎是空的,這可能不是您想要的!由於 API 數量非常龐大,此 crate 使用功能來啟用其 API 的部分,以減少編譯時間。 Cargo.toml
中的功能列表都對應於產生函式中的型別。啟用某個功能就會啟用該型別。所有方法都應指示需要啟動哪些功能才能使用該方法。