Add a top-level web_sys::window function

Returns `Option<Window>` and can be used as a convenience to get a handle to the
global `window` object.
This commit is contained in:
Alex Crichton 2018-09-17 14:25:04 -07:00
parent 99e1b352e5
commit f24828a16b
5 changed files with 19 additions and 4 deletions

View File

@ -17,4 +17,15 @@ extern crate wasm_bindgen;
extern crate js_sys;
use js_sys::Object;
#[cfg(feature = "Window")]
pub fn window() -> Option<Window> {
use wasm_bindgen::{JsValue, JsCast};
js_sys::Function::new_no_args("return this")
.call0(&JsValue::undefined())
.ok()?
.dyn_into::<Window>()
.ok()
}
include!(concat!(env!("OUT_DIR"), "/bindings.rs"));

View File

@ -8,7 +8,7 @@ use wasm_bindgen::JsCast;
#[wasm_bindgen]
pub fn draw() {
let document = web_sys::Window::document().unwrap();
let document = web_sys::window().unwrap().document().unwrap();
let canvas = document.get_element_by_id("canvas").unwrap();
let canvas: web_sys::HtmlCanvasElement = canvas
.dyn_into::<web_sys::HtmlCanvasElement>()

View File

@ -8,3 +8,6 @@ cargo +nightly build --target wasm32-unknown-unknown
cargo +nightly run --manifest-path ../../crates/cli/Cargo.toml \
--bin wasm-bindgen -- \
../../target/wasm32-unknown-unknown/debug/fetch.wasm --out-dir .
npm install
npm run serve

View File

@ -12,7 +12,7 @@ use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
use wasm_bindgen_futures::future_to_promise;
use wasm_bindgen_futures::JsFuture;
use web_sys::{Request, RequestInit, RequestMode, Response, Window};
use web_sys::{Request, RequestInit, RequestMode, Response};
/// A struct to hold some data from the github Branch API.
///
@ -57,7 +57,8 @@ pub fn run() -> Promise {
.set("Accept", "application/vnd.github.v3+json")
.unwrap();
let request_promise = Window::fetch_with_request(&request);
let window = web_sys::window().unwrap();
let request_promise = window.fetch_with_request(&request);
let future = JsFuture::from(request_promise)
.and_then(|resp_value| {

View File

@ -9,7 +9,7 @@ use wasm_bindgen::JsCast;
#[wasm_bindgen]
pub fn main() {
let document = web_sys::Window::document().unwrap();
let document = web_sys::window().unwrap().document().unwrap();
let canvas = document
.create_element("canvas")
.unwrap()