web-sys 中的類型轉換

大多數在 WebIDL (所有 Web API 的介面定義語言) 中指定的類型,都有相對簡單的轉換到 web-sys 中,但特別值得提出一些

  • BufferSourceArrayBufferView - 這兩種型別出現在許多通常處理位元組緩衝區的 API 中。我們在 web-sys 中使用兩種不同的類型將它們綁定,js_sys::Object&mut [u8]。使用 js_sys::Object 可以傳入表示位元組視圖的任意 JS 值 (例如任何型別化的陣列物件),而 &mut [u8] 則允許在 Rust 中使用原始切片。不幸的是,我們必須悲觀地假設 JS 會修改所有切片,因為我們目前沒有關於它們是否被修改的資訊。

  • 回呼都以 js_sys::Function 表示。這表示所有通過 web-sys 的回呼都是原始 JS 值。您可以使用實際的 js_sys::Function 實例來處理此問題,或者您可以建立 Closure<dyn FnMut(...)>,使用 as_ref 提取底層的 JsValue,然後使用 JsCast::unchecked_ref 將其轉換為 js_sys::Function