Использовать AudioWorklet в электронном формате (DOMException: пользователь прервал запрос) - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь использовать AudioWorklet в моем электронном приложении для измерения и т. Д., Который отлично работает при выполнении в режиме разработки, где рабочий сервлет обслуживается сервером экспресс-разработки, таким как http://localhost:3000/processor.js. Однако, если я пытаюсь запуститьприложение в режиме prod файл обслуживается локально, как file: //tmp/etc/etc/build/processor.js, и в консоли разработчика я даже вижу, что файл правильно просматривается, но я получаю это сообщение об ошибке:

Uncaught (в обещании) DOMException: пользователь прервал запрос.

Я видел, что у кого-то еще была похожая проблема до здесь , но, к сожалению, моя репутация в отношении переполнения стеканедостаточно высоко, чтобы комментировать напрямую.Предложение там изменить тип mime на application / javascript или text / javascript звучит хорошо, но я понятия не имею, как заставить электрон использовать определенный тип mime для определенного файла.Кроме того, в консоли разработчика на вкладке сети кажется, что хром фактически уже использует файл javascript для моего процессора. Js.

Я уже пытался загрузить рабочий лист с помощью специального протокола, подобного этому

protocol.registerStandardSchemes(['worklet']);

app.on('ready', () => {
  protocol.registerHttpProtocol('worklet', (req, cb) => {
    fs.readFile(req.url.replace('worklet://', ''), (err, data) => {
      cb({ mimeType: 'text/javascript', data });
    });
  });
});

и затем при добавлении рабочего листа

await ctx.audioWorklet.addModule('worklet://processor.js');

к сожалению, это заканчивается только этими ошибками, за которыми следует первая ошибка

GET worklet: //processor.js/ 0 ()
Uncaught Error: предоставленная вами ошибка не содержит трассировки стека.
...

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Если вы используете веб-пакет для компиляции исходного кода, вы должны иметь возможность использовать загрузчик веб-работника для своих пользовательских рабочих сценариев.

0 голосов
/ 12 октября 2018

Я нашел хакерское решение, если кому-то интересно.Чтобы заставить mime-тип электрон / хром доволен, я загружаю файл рабочего файла с файлом api в виде строки, преобразую его в BLOB-объект с текстом / javascript типа mime, а затем создаю URL объекта из этого

const processorPath = isDevMode ? 'public/processor.js' : `${global.__dirname}/processor.js`;
const processorSource = await readFile(processorPath); // just a promisified version of fs.readFile
const processorBlob = new Blob([processorSource.toString()], { type: 'text/javascript' });
const processorURL = URL.createObjectURL(processorBlob);
await ctx.audioWorklet.addModule(processorURL);

Надеюсь, это поможет любому, у кого такая же проблема ...

...