未捕获的 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 未定义”

未捕获的 ReferenceError:$ 未定义 [重复]

未捕获的 ReferenceError:未定义 url