【发布时间】:2018-07-25 02:41:03
【问题描述】:
WebWorker 的执行范围与传统 JavaScript 的“窗口”上下文完全不同。脚本是否有标准方法来确定它本身是否作为 WebWorker 执行?
我能想到的第一个“hack”是检测工人范围内是否存在“window”属性。如果不存在,这可能意味着我们正在作为 WebWorker 执行。
其他选项是检测标准“窗口”上下文中不存在的属性。对于 Chrome 14,此列表目前包括:
FileReaderSync
FileException
WorkerLocation
importScripts
openDatabaseSync
webkitRequestFileSystemSync
webkitResolveLocalFileSystemSyncURL
Detecting WorkerLocation 似乎是一个可行的候选方案,但这仍然让人觉得有点骇人听闻。有没有更好的办法?
编辑:Here 是我用来确定正在执行的 WebWorker 中存在的属性的 JSFiddle,这些属性现在位于“窗口”中。
【问题讨论】:
-
你为什么不能只检查
window? -
!(typeof window == "object" && typeof document == "object" && window.document === document)怎么样?
标签: javascript html web-worker