未捕获的 ReferenceError:未定义窗口
Posted
技术标签:
【中文标题】未捕获的 ReferenceError:未定义窗口【英文标题】:Uncaught ReferenceError: window is not defined 【发布时间】:2013-12-06 20:43:08 【问题描述】:importScripts('js/jquery.js');
importScripts('js/jquery.mobile-1.2.0.js');
importScripts('cordova.js');
importScripts('DataBase.js');
importScripts('SaveData.js');
self.addEventListener('message', function(e)
queryDB(function(arr)
self.postMessage(e.data + arr);
);
, false);
在这里,我尝试使用 html 5 工作线程从数据库中检索数据并显示在父页面中。但出现以下错误。
Uncaught ReferenceError: window is not defined
【问题讨论】:
HTML5 工作者没有附加到window
。您必须在消息中发回您的数据。
你能详细说明你的答案吗?你能告诉我我是如何读取这个数组并传回父窗口的吗?
如果您需要详细程度的答案,请问问自己网络工作者是否是完成这项工作的合适方式。如果您只是从数据库中读取数据,一个简单的 AJAX 调用和回调就足够了。
实际上我从数据库(LocalStorage)中获取数据。但这需要一些时间,所以我需要将其移交给工作线程。当工作线程正在执行工作时,我需要显示加载消息
为什么要将 jquery mobile 包含在 webworker 中?
【参考方案1】:
你不能 importScript jQuery,因为 jQuery 需要 DOM 访问,而 web worker 没有。
【讨论】:
【参考方案2】:如果您在使用 importScripts
功能的 Web Workers 中遇到此错误,那是因为您正在导入的脚本可能引用了 window
对象;这在 Web Workers 中不受支持。
要解决此问题,请执行以下操作:
-
将此代码放在导入脚本中的任何其他代码之前:
var _window = this || self || window;
以上确保self
(与Web Workers兼容)在不支持的window
之前被调用。
-
将所有出现的
window
替换为_window
。
【讨论】:
这是唯一对我有用的解决方案,如果我尝试检查窗口是否存在,我得到一个错误...以上是关于未捕获的 ReferenceError:未定义窗口的主要内容,如果未能解决你的问题,请参考以下文章
打字稿 - 未捕获的 ReferenceError:未定义导出
未捕获的 ReferenceError:未定义 showCategory
未捕获的 ReferenceError:“$ 未定义”[重复]
PhoneGap 错误 - “未捕获的 ReferenceError:cordova 未定义”