我们刚刚在 crates.io 上发布了 js-sys

js-sys 库包含对所有全局 API 的原始 #[wasm_bindgen] 绑定,这些 API 由 ECMAScript 标准保证存在于每个 JavaScript 环境中。它包含对任何 Web 或 Node 特定 API 的绑定。使用 js-sys 库,我们可以使用 ObjectArrayFunctionMapSet 等,而无需手动编写 #[wasm_bindgen] 导入。

例如,我们可以调用 JavaScript Function 回调并使用 Date.now() 计时它们执行所需的时间,我们不需要自己编写任何 JS 导入

extern crate js_sys;
extern crate wasm_bindgen;
use wasm_bindgen::prelude::*;

#[wasm_bindgen]
pub fn timed(callback: &js_sys::Function) -> f64 {
    let then = js_sys::Date::now();
    callback.apply(JsValue::null(), &js_sys::Array::new()).unwrap();
    let now = js_sys::Date::now();
    now - then
}

js-sys 库还没有完全完成。我们仍然缺少一些 JavaScript 类型和方法的绑定。如果您想帮助 js-sys 完成,请查看此问题!

此外,如上所述,js-sys 库不包含对任何 Web API 的绑定,例如 document.querySelectorAll。这些将成为 web-sys 库的一部分,该库是从 WebIDL 接口定义机械生成的。我们也需要帮助 web-sys如果您想帮助 web-sys,请查看 其贡献文档标记为“web-sys”的问题

最后,非常感谢 到目前为止为 js-sys 库做出贡献的 34 位人士!💖

  • Alexander Kryvomaz
  • Alex Crichton
  • belfz
  • Chris Kolodin
  • Craig Disselkoen
  • data-pup
  • Dimitrii Nemkov
  • gaurikholkar
  • Herman J. Radtke III
  • Ivan Enderlin
  • Jannik Keye
  • Johannes Henninger
  • Jonathan Sundqvist
  • Kevin Hoffman
  • kzvi
  • Lachezar Lechev
  • Liigo Zhuang
  • Marcin Baraniecki
  • Matias Insaurralde
  • Matt Long
  • Michael Hoffmann
  • Nick Fitzgerald
  • R. Andrew Ohana
  • robertdurst
  • Satoshi Amemiya
  • Sendil Kumar
  • Stephan Renatus
  • Tim Ryan
  • T. Nagasawa
  • Tomohide Takao
  • toversus
  • Tyler Laing
  • Tyler Wilcock
  • xeqlol