Javascript Firefox服务工作者(作为代理)似乎可以工作,但JS模块从未运行过

Javascript Firefox服务工作者(作为代理)似乎可以工作,但JS模块从未运行过,javascript,firefox,service-worker,Javascript,Firefox,Service Worker,我在和服务人员玩。以下代码应代理JS文件来修补导入,以便它们符合平台标准(即,“/”、“./”、“/”、或)http://...“) 在Chromium中非常有效(在ArchLinux上为67.0.3396.79)。在Firefox(Arch上的60.0.2(64位)版本)中似乎也能正常工作,至少在网络选项卡上,我可以看到所有的补丁源代码正在加载,但由于某些原因,JS模块没有运行。无法console.log等。不知道如何让Firefox引导应用程序 我注意到fetch头都是toLowerCase

我在和服务人员玩。以下代码应代理JS文件来修补导入,以便它们符合平台标准(即,
“/”
“./”
“/”
、或
)http://...“

在Chromium中非常有效(在ArchLinux上为67.0.3396.79)。在Firefox(Arch上的60.0.2(64位)版本)中似乎也能正常工作,至少在网络选项卡上,我可以看到所有的补丁源代码正在加载,但由于某些原因,JS模块没有运行。无法
console.log
等。不知道如何让Firefox引导应用程序

我注意到fetch头都是
toLowerCase
ed,但我读到了这一点,Mozilla还指出头名称不区分大小写

我还认为,可能是因为内容长度发生了变化,文件没有被完全接收,但我没有看到任何解析错误,而且网络选项卡的内容长度也发生了正确的变化,所以我排除了这种可能性

const maybeAppendJS = (x) =>
    x.endsWith(".js")
        ? x
        : `${x}.js`;


const maybePatchURL = (x) =>
    x.match(/(^'@.*'(.)?$)|(^"@.*"(.)?$)/)
        ? `"/node_modules/${maybeAppendJS(eval(x))}";`
        : x;


const maybePatchImport = (x) =>
    x.startsWith("import ")
        ? x.split(/\s/).map(maybePatchURL).join(" ")
        : x;


async function maybeRewriteImportStatements(event) {

    let candidate = event.request.url;
    const url = maybeAppendJS(candidate);

    const resp = await fetch(url);

    if (!resp.headers.get("content-type").startsWith("text")) {
        const text = await resp.text();
        const newText = text.split(/\n/g)
            .map(maybePatchImport)
            .join("\n");

        return new Response(newText, {headers: resp.headers});
    }

    if (resp.headers.get("content-type").startsWith("text/")) {
        const location = `${url.substring(0, url.length - 3)}/index.js`;
        return new Response(null, {status: 302, headers: {location: location}});
    }

    console.log("Service worker should never get here");

}

this.addEventListener('fetch', (event) => {
    if (event.request.destination === "script" || event.request.referrer.endsWith(".js") || event.request.url.endsWith(".js")) {
        event.respondWith(maybeRewriteImportStatements(event));
    }
});

这通过每晚升级到Firefox(62.0a1.20180611-1)得到修复