【问题标题】:Uncaught ReferenceError: window is not defined未捕获的 ReferenceError:未定义窗口
【发布时间】: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 中?

标签: jquery html jquery-mobile cordova


【解决方案1】:

你不能 importScript jQuery,因为 jQuery 需要 DOM 访问,而 web worker 没有。

【讨论】:

    【解决方案2】:

    如果您在使用 importScripts 功能的 Web Workers 中遇到此错误,那是因为您正在导入的脚本可能引用了 window 对象;这在 Web Workers 中不受支持。

    要解决此问题,请执行以下操作:

    1. 将此代码放在导入脚本中的任何其他代码之前:
    var _window = this || self || window;
    

    以上确保self(与Web Workers兼容)在不支持的window之前被调用。

    1. 将所有出现的window 替换为_window

    【讨论】:

    • 这是唯一对我有用的解决方案,如果我尝试检查窗口是否存在,我得到一个错误...
    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 2016-01-05
    • 1970-01-01
    • 2016-11-03
    • 2011-01-05
    • 2016-01-02
    • 2013-10-06
    • 2016-12-17
    相关资源
    最近更新 更多