Обнаружение функции для общей рабочей ошибки Firefox 57+ - PullRequest
0 голосов
/ 29 июня 2018

Как обсуждалось в в этом вопросе и в этой ошибке , совместно используемые работники были сильно повреждены в Firefox начиная с версии 57. По сути, «общая» часть отсутствует. Он должен работать так, что при создании общего работника с одним и тем же рабочим скриптом на двух вкладках будет создан только один экземпляр работника, но в Firefox он создает два экземпляра.

Любой, кто использует совместно используемых работников, знаком с этим типом проблемы, поскольку совместно используемые работники не поддерживаются в IE, Edge или Safari. Так что вы должны сделать должное с веб-работниками. Хорошо, я мог бы сделать то же самое с ошибочными версиями Firefox, кроме ... как мне сделать обнаружение функций для этого, чтобы я мог в этом случае отправить не-совместно используемую версию моего работника?

Я подумал, что могу использовать такого работника и посмотреть, сбрасывается ли счетчик, когда он не должен:

var count = 0; onconnect = function (e) { var port = e.ports[0]; port.postMessage(count); count += 1; }

Моя первая идея состояла в том, чтобы просто создать двух общих работников на одной странице и посмотреть, равен ли счетчик 0 для них обоих. Но это не так. Это:

function createWorker(url, workerNum) {
    var worker = new SharedWorker(url);
    worker.port.onmessage = function (e) {
        console.log("Worker " + workerNum + ": " + e.data);
    };
}

for (var i = 0; i < 2; i++) {
    createWorker("worker.js", i);
}

выдает правильный вывод:

Worker 0: 0
Worker 1: 1

Тогда я подумал, что, возможно, я смогу запустить этот скрипт в двух фреймах на одной странице, но без кубиков, это тоже правильно:

Worker 0: 0
Worker 1: 1
Worker 0: 2
Worker 1: 3

Если я открою страницу в двух вкладках, я вижу проблему - счетчик сбрасывается в 0 на каждой вкладке. Но если требуется, чтобы пользователи открывали новую вкладку, это не очень полезная функция обнаружения. Хуже того, ошибка кажется прерывистой. Иногда счетчик корректно сохраняется на всех вкладках! Так что такой подход не сработает ...

Это похоже на очень неприятную ошибку, для которой нужно обнаруживать функции. У кого-нибудь есть какие-либо идеи? Или я застрял при разборе строк агента пользователя?

...