#webkit #cocoa #macos #api-bindings #helper

darwin-webkit

为MacOS上的Rust绑定了一些WebKit的API

5个版本

使用旧Rust 2015

0.2.0 2023年11月15日
0.1.3 2020年10月31日
0.1.2 2020年10月31日
0.1.1 2020年10月31日
0.1.0 2020年10月31日

#38macOS和iOS API

Download history 13/week @ 2024-03-30 3/week @ 2024-04-06

198 每月下载量

MIT 许可证

125KB
1K SLoC

rust-darwin-webkit

Crates.io


darwin_webkit 提供了对MacOS上WebKit的一些API的绑定。它使用 objccocoa crate来与Objective-C绑定。

尚未进行适当的测试。

可以通过获取本地webview句柄并将其添加到插件本地的 NSWindowView 句柄中来将其嵌入到音频插件中。

闭包捕获是不安全的,因为我们只是传递指针。

安装

cargo add darwin-webkit

示例

extern crate cocoa;
extern crate darwin_webkit;

use darwin_webkit::helpers::dwk_app::DarwinWKApp;

fn main() {
    unsafe {
        let app = DarwinWKApp::new("Simple WebView");
        let webview = app.create_webview();
        webview.load_url("https://www.google.com.br");
        app.set_webview(&webview);
        app.run();
    }
}

通信示例

extern crate cocoa;
extern crate darwin_webkit;

use cocoa::base::id;
use darwin_webkit::helpers::dwk_app::DarwinWKApp;
use std::rc::Rc;

fn main() {
    unsafe {
        let app = DarwinWKApp::new("Host an app");
        let webview = Rc::new(app.create_webview());

        let callback = Box::into_raw(Box::new(Box::new(|_: id, _: id| {
            println!("JavaScript called rust!");
            webview.evaluate_javascript("document.body.innerHTML += ' -> response from rust';");
        })));
        webview.add_message_handler("hello", callback);
        webview.load_html_string(
            "
            <script>
                document.body.innerHTML += 'start';
                window.webkit.messageHandlers.hello.postMessage('hello');
                document.body.innerHTML += ' -> success';
            </script>
            ",
            "",
        );

        app.set_webview(&webview);
        app.run();
    }
}

缺失

  • 从JavaScript到Rust的回调。
  • 原始绑定中的TODOs
    • serverTrustWKWebView
    • NSURLRequest
      • 处理缓存策略
      • 访问请求组件
      • 获取头部字段
      • 控制请求行为
      • 访问服务类型
      • 支持安全编码
  • ...

代码检查

cargo clippy

依赖关系

~0–315KB