标签: webassembly

是否可以只使用QT和WebAssembly(而不是HTML + CSS + JavaScript)来开发前端Web?

我是一名C++程序员,但由于某种原因,我必须自己开发一个网站(我自己的商业项目)。我不想花很多时间去学习 JavaScript 和其他东西。是否可以只使用QT和WebAssembly(而不是HTML + CSS + JavaScript)来开发前端Web?

c++ qt frontend web webassembly

4
推荐指数
1
解决办法
1844
查看次数

如何使用 EM_JS 从 C++ 调用带参数的 javascript 方法

我刚刚完成了从 C/C++ 调用 JavaScript并按照他们的说明进行操作。我可以从 C++ 调用 Js 方法

C++

#include <iostream>
#include <string>

#include <emscripten.h>
#include <emscripten/bind.h>

EM_JS(void, call_js, (), {
    jsMethod();
});

bool callJsBack()
{
    call_js();
    return true;
}

EMSCRIPTEN_BINDINGS(module)
{
    emscripten::function("callJsBack", &callJsBack);
}
Run Code Online (Sandbox Code Playgroud)

杰斯

<script>
    var Module = {
        onRuntimeInitialized: function() {
            console.log('Module.callJsBack(): ' + Module.callJsBack());
        }
    };

    function jsMethod() {
        alert('I am a js method!');
    }
 </script>
Run Code Online (Sandbox Code Playgroud)

我想让 jsMethod() 参数化(想要在调用 jsMethod() 时从 C++ 传递字符串)。

function jsMethod(msg) {
    alert(msg);
}
Run Code Online (Sandbox Code Playgroud)

我没有找到任何例子或建议来实现这个要求。

c++ emscripten webassembly

4
推荐指数
1
解决办法
3310
查看次数

使用 wasm-pack 构建时在 Rust 和 JavaScript 之间传递字符串

我正在构建一个 Chrome 扩展程序,并选择使用一些 WebAssembly 功能。我使用 wasm-pack 来构建源代码,因为它提供了--target web降低插入 Wasm 函数的复杂性的方法。在 Rust 和 JS 之间传递整数值可以无缝地工作,但我似乎无法将字符串传递给 Rust,反之亦然。

这是我正在处理的内容:

#[wasm_bindgen]
extern "C" {
    fn alert(s: &str);

    #[wasm_bindgen(js_namespace = console)]
    fn log(x: &str);
} 

#[wasm_bindgen]
pub extern "C" fn add_two(x: i32) -> i32 {
   x + 2
}

#[wasm_bindgen]
pub fn hello(name: &str) {
    log("Hello") // <-- passing a '&str' directly works. I can see it in the browser.
    log(name) // <-- does not seem to work. There is no output
    alert(&format!("Hello …
Run Code Online (Sandbox Code Playgroud)

rust rust-cargo webassembly wasm-bindgen wasm-pack

4
推荐指数
1
解决办法
1403
查看次数

如何将文件从 HTML 输入加载到 Emscripten 的 MEMFS 文件系统中?

我有一个像这样的 HTML 输入<input type="file" id="myfile" onchange="load_file()">。我想将文件加载到 Emscripten 的 MEMFS 文件系统中。查看Emscripten 文件 API,我一直在尝试使用 FS.mount() 来执行此操作。

但是,文档仅给出了使用 WORKERFS 进行挂载的示例,因此我尝试像这样使用它。

let files = document.getElementById('myfile').files;
let file=files[0];
FS.mount(MEMFS, {files: file },'test');
console.log(FS.readFile('test/' + file.name));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试读取该文件时收到“没有这样的文件或目录”错误消息。

对我哪里出错有什么建议吗?

javascript emscripten webassembly

4
推荐指数
1
解决办法
1918
查看次数

WebAssembly i64 原始类型

WebAssembly 文档指出WebAssembly 只能采用以下类型

\n
i32 | i64 | f32 | f64\n
Run Code Online (Sandbox Code Playgroud)\n

一切都很好,但是,这是一个非常简单的 C++ 测试,它需要 4 个整数并打印它们。

\n
void intTest(\n        int32_t int32TypeArg,\n        uint32_t uint32TypeArg,\n        int64_t int64TypeArg,\n        uint64_t uint64TypeArg\n    ){\n    std::cout << " int32_t     :" << to_string(int32TypeArg) << std::endl;\n    std::cout << " uint32_t    :" << to_string(uint32TypeArg) << std::endl;\n    std::cout << " int64_t     :" << to_string(int64TypeArg) << std::endl;\n    std::cout << " uint64_t    :" << to_string(uint64TypeArg) << std::endl;\n\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

当我在 Firefox 中从 java 脚本编译并调用这个测试时,如下所示:

\n
let js_int32_t = -1;\nlet js_uint32_t = …
Run Code Online (Sandbox Code Playgroud)

c++ webassembly c++17

4
推荐指数
1
解决办法
1050
查看次数

如何在 Blazor 中发送大小超过 Signalr 消息大小限制的数据?

我们知道它Blazor用于SignalR客户端和服务器之间的通信,并且还有消息大小限制SignalR(当前为32k)。如何从服务器向客户端发送超过 32k 的数据,反之亦然?

c# signalr webassembly asp.net-core blazor

4
推荐指数
1
解决办法
5015
查看次数

如何将文件/blob 从 JavaScript 传递到 emscripten/WebAssembly (C++)?

我正在编写一个使用用 emscripten 编译的 C++ 代码的 WebExtension。WebExtension 下载我想要在 C++ 代码中处理的文件。我知道文件系统 API,并且我想我阅读了其中的大部分内容,但我无法让它工作 - 使下载的文件可以在 emscripten 中访问。

这是我的 WebExtension 的相关 JavaScript 部分:

// Download a file
let blob = await fetch('https://stackoverflow.com/favicon.ico').then(response => {
  if (!response.ok) {
    return null;
  }     
  return response.blob();
});

// Setup FS API
FS.mkdir('/working');
FS.mount(IDBFS, {}, '/working');
FS.syncfs(true, function(err) {
  if (err) {
    console.error('Error: ' + err);
  }
});

// Store the file "somehow"
let filename = 'favicon.ico';
// ???

// Call WebAssembly/C++ to process the file
Module.processFile(filename); …
Run Code Online (Sandbox Code Playgroud)

javascript emscripten webassembly

4
推荐指数
1
解决办法
3303
查看次数

Chrome 扩展程序拒绝将字符串评估为 JavaScript,因为 emscripten 生成的文件中存在“unsafe-eval”

我正在尝试在 Chrome 插件中加载 wasm 模块。Chrome 抱怨 emscripten 生成的 wasm 模块中存在以下函数。它在以下js上跳闸

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' blob: filesystem:".

function createNamedFunction(name, body) {
      name = makeLegalFunctionName(name);
      /*jshint evil:true*/
      return new Function(
          "body",
          "return function " + name + "() {\n" +
          "    \"use strict\";" +
          "    return body.apply(this, arguments);\n" +
          "};\n"
      )(body);
    }
Run Code Online (Sandbox Code Playgroud)

我将脚本加载到文件中background.html,以便它可以充当模块。。

<script type="module" src="../js/background.js"></script>
<script …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome-extension web emscripten webassembly

4
推荐指数
1
解决办法
1847
查看次数

在 wasm 应用程序中获取服务器 IP

我使用 C++ 和 Qt 5.15.x。我已经构建了桌面应用程序的 WebAssembly 版本。该应用程序使用“http://192.168.21.55:5555”(内联网应用程序)之类的 URL 加载。我想在 WebAssembly 应用程序中提取服务器 IP 地址。我怎样才能实现它?

javascript c++ qt ip-address webassembly

4
推荐指数
1
解决办法
646
查看次数

基于WebAssembly堆栈的虚拟机在哪里实现?

引用https://web assembly.org/

WebAssembly(缩写为 Wasm)是一种基于堆栈的虚拟机的二进制指令格式。Wasm 被设计为编程语言的可移植编译目标,支持在网络上部署客户端和服务器应用程序。

我在维基百科上读到过有关基于堆栈的虚拟机的信息。不过,我想知道基于 WebAssembly 堆栈的虚拟机驻留在哪里。它是否嵌入在 javascript 引擎中(例如,在 V8 上)?V8是否将.wasm文件交给另一个虚拟机来运行?

virtual-machine webassembly

4
推荐指数
1
解决办法
1350
查看次数