【问题标题】:loading native addons on client side在客户端加载本机插件
【发布时间】:2014-12-18 01:03:11
【问题描述】:

是否可以使用 requireJS 或其他模块从客户端 javascript 加载本机插件(用 C/C++ 编写,如在 nodejs 中)?

我正在编写一个 nodejs + express 应用程序,它提供一个加载 javascript 文件的 html 文件。我正在使用 requireJS 并将这些客户端 js 文件编译到 AMD 模块中。我可以从 nodejs 服务器端 js 脚本加载和调用本机方法,并想知道是否可以从客户端 js 脚本中执行相同的操作。

【问题讨论】:

    标签: javascript c++ node.js requirejs client-side


    【解决方案1】:

    不,您不能像这样强制客户端通过浏览器执行本机应用程序。它会出现一个非常大的安全漏洞,允许任何黑客出现并在任何客户端上执行任意暴力代码,这是严格防止的。不过,您可以通过 API 在服务器端执行 C++ 插件,这应该可以解决大多数用例。

    【讨论】:

    • 为了扩展这个答案,可以通过 1) 要求用户下载本机应用程序并解释来实现类似的效果b> 为什么需要或扩展您的网络应用程序的体验,然后使用像 tel 这样的专用协议从您的网络应用程序调用本机应用程序或 2) 传递应用程序通过 ajax 向服务器发送状态信息,并使用本地代码处理它。
    • 我知道允许客户端执行本机代码的安全问题,但希望在 nodejs 环境中是否有办法,因为这严格来说是本地应用程序。我想我可以在服务器端执行本机代码并将结果反馈给客户端。谢谢!
    【解决方案2】:

    RequireJS 不是您要实现的目标的驱动因素。加载本机代码的能力完全取决于运行代码的 JavaScript VM 是否允许。 如果 VM 不允许,RequireJS 无法添加此功能。

    您可以在 Node 中执行此操作,因为 Node 允许这样做。

    浏览器对其允许的内容有更多的限制。在网页中执行的 JavaScript 脚本通常无法加载本机代码,因为正如 Chris Franklin 所解释的,这是一个安全漏洞。

    让 C 或 C++ 库提供的功能在浏览器端运行的一种方法是使用 Emscripten 之类的东西将 C 或 C++ 代码编译为 JavaScript。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多