Глобальная переменная в веб-работнике
Я использую этого веб-работника, в котором объявлена глобальная переменная. Могу ли я получить доступ к тому же (Глобальная переменная в работнике 1) во вновь созданном веб-работнике (работник 2)?
Когда я пытался использовать jQuery в веб-работнике, я получаю сообщение об ошибке "окно не определено". Есть ли способ использовать JQuery в Web Worker
?
importScripts('JQuery-latest.js'); function fetch_ajax(url) { $.Ajax({ тип: 'GET', URL: URL, success: function(response) { PostMessage(ответ); } }); } fetch_ajax('test.txt');
2 ответа
Веб-работники не имеют window
объект.
Чтобы получить доступ к глобальному состоянию, используйте self
вместо этого код, который будет работать как в основном потоке, так и в рабочем.
Но обратите внимание, что вы все равно не сможете получить доступ или манипулировать родителем DOM
(например, получить window.jQuery
с помощью self.jQuery
).
Пока главное окно темы self
указывает на объект Window в рабочих потоках self
указывает на отдельный WorkerGlobalScope
объект.
Основываясь на подсказке @buley, я сделал это:
var window = self;
importScripts(/* dependencies here */);
/* my code */
В моем случае я пытался использовать библиотеку ES6-Promise: https://github.com/jakearchibald/es6-promise