簡體   English   中英

如何在Web Worker中使用其他庫?

[英]How Can I use Other Libraries in a Web Worker?

我有一些像這樣的javascript代碼,

var worker = new Worker("javascript/worker.js");

worker.onmessage = function(evt)
{
    // stuff
}

worker.js看起來像這樣,

importScripts("base.js");

function getImage()
{
    $.ajax({
    url: 'URL'
    dataType: "text/plain; charset=x-user-defined",
    mimeType: "text/plain; charset=x-user-defined",
    success: function(data, textStatus, jqXHR)
    {
        callback();
    }
});
}

worker.js文件沒有包含jQuery,因此不起作用。 如果我將它添加到worker.js,

importScripts("jQuery.js");

然后我收到消息,

Uncaught ReferenceError: window is not defined

我對工人並不熟悉。 我是否認為這是在一個完全獨立的環境(基本上是后台線程)中加載worker.js代碼,因此它無法訪問窗口。

在worker的.js文件中:

importScripts('../relative/path/lib.min.js', '../../other/lib.js');

為了防止Web worker遇到並發問題,Web worker規范阻止了worker訪問window對象或DOM。

工作者中唯一可用的對象和方法是:

  1. 導航器對象
  2. 位置對象
  3. XMLHttpRequest的
  4. setTimeout和clearTimeout函數。
  5. 應用程序緩存
  6. 產卵其他網絡工作者
  7. 使用webworker特定方法加載其他腳本

因此,您可以使用worker手動創建XMLHttpRequest; 期望能夠訪問DOM或Window對象的Jquery或任何其他庫永遠不會在那里工作。

是的,我已正確地指出ajax調用是異步的,因此不需要worker。 對於我不會解釋的情況,結果是ajax調用無論如何都沒有用,所以我回到了XMLHttpRequest它是怎么回事並讓它使用了一個worker。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM