我已经无计可施了。知道网络工作人员无法访问
window
对象,有什么方法可以做到这一点吗?请帮忙!
我知道这是一个老问题,但我偶然发现,事情发生了变化。现在大多数浏览器都支持网络工作者中的加密。
在 webworkers 中,您可以访问
self
,它不包含所有“窗口”属性(尤其是与 dom 相关的属性),但包含加密函数等 API 方法。
因此您可以简单地从 webworker 中访问
self.crypto.getRandomValues()
。
我做了一个小提琴作为例子:http://jsfiddle.net/jbrosi/yj17gomk/
但是请注意,对 webworker 和返回的调用也会对性能产生很小的影响,并且最昂贵的加密函数(例如
crypto.subtle.encrypt
是异步的,因此应该不 完全阻止您的主线程。
来自MDN:
[Web Crypto API] 可在 Web Workers 中使用。
访问它查看
self.crypto.getRandomValues()
。
没有办法做到这一点,因为 Crypto 类和方法是“本机代码”,这意味着它们是在浏览器中的较低级别实现的,因此我们无法提取代码并将其移动到其他地方。我尝试使用 Chrome 的 Transferrable Objects 对象从当前上下文中删除并传递给工作人员,但这会引发错误。我不认为加密 API 需要与 DOM 耦合(WebWorkers 不会接触 DOM,因为它不是线程安全的),但我以前从未实现过加密。在 Node 中,我们有一个异步 api,所以至少对我来说,它似乎应该是线程安全的。
我创建了一个 WebWorker 脚本来验证,也许,只是也许,Chrome 和 Firefox 只是有不同的实现,不幸的是,我错了。
我已向 W3C Web Crypto API 提案 的作者发送了一封电子邮件,您也应该这样做。目前该草案似乎还有一些未解决的问题,因此它似乎可能会发生变化。在我看来,在 Web Workers 中使用异步 API 或使用
crypto
API 似乎完全合理。阻塞主事件循环似乎是一件坏事。