#emscripten #bindings #api-bindings

emscripten-functions

Rust友好的各种emscripten系统函数的绑定

4个版本

0.2.2 2024年7月15日
0.2.1 2023年10月2日
0.2.0 2023年9月6日
0.1.0 2023年8月26日

#292 in WebAssembly

Download history 133/week @ 2024-07-15 2/week @ 2024-07-29

135 每月下载量

MIT 许可证

2.5MB
4.5K SLoC

emscripten-functions

此crate包含各种emscripten系统函数(使用rust-native参数和返回值类型制作),使得针对emscripten目标的Rust编程更加容易。以下emscripten头文件中的函数可用:

  • emscripten
  • console

示例

有关更多示例和Rust中emscripten的技巧,请参阅我的主项目的README

从Rust运行javascript

使用emscripten_functions::emscripten::run_script等函数系列,你可以在你的web应用中运行所需的javascript。

示例

// The `.escape_unicode()` method makes it safe to pass untrusted user input.
run_script(
    format!(
        r##"
            document.querySelector("#this-is-secure").innerHTML = "{}"
        "##,
        "untrusted user input".escape_unicode()
    )
);

主循环控制

如果你需要反复运行循环函数,emscripten有自己的主循环管理系统。使用emscripten_functions::emscripten::set_main_loopemscripten_functions::emscripten::set_main_loop_with_arg函数,你可以将Rust函数作为主循环运行,并完全控制主循环的运行参数。

示例

struct GameData {
    level: u32,
    score: u32
}
let mut game_data = GameData {
    level: 1,
    score: 0
}

set_main_loop_with_arg(|data| {
    if data.score < data.level {
        data.score += 1;
    } else {
        data.score = 0;
        data.level += 1;
    }

    // Here you call your display to screen functions.
    // For demonstration purposes I chose `println!`.
    println!("Score {}, level {}", data.score, data.level);
}, game_data, 0, true);

依赖项