为啥我得到一个“df.worker.min.js”被加载,即使它的 MIME 类型(“text/html”)不是一个有效的 JavaScript MIME 类型”

Posted

技术标签:

【中文标题】为啥我得到一个“df.worker.min.js”被加载,即使它的 MIME 类型(“text/html”)不是一个有效的 JavaScript MIME 类型”【英文标题】:Why do I get a "df.worker.min.js” was loaded even though its MIME type (“text/html”) is not a valid JavaScript MIME type"为什么我得到一个“df.worker.min.js”被加载,即使它的 MIME 类型(“text/html”)不是一个有效的 JavaScript MIME 类型” 【发布时间】:2019-08-16 15:08:50 【问题描述】:

我尝试在一个带有 parceljs 作为捆绑器的小型打字稿应用程序中使用 pdfjs,但是当我加载 worker 时:

pdfjsLib.GlobalWorkerOptions.workerSrc = '../../node_modules/pdfjs-dist/build/pdf.worker.min.js';

我在 Firefox 控制台中收到此错误:

pdf.worker.min.js” was loaded even though its MIME type (“text/html”) is not a valid javascript MIME type

并且工人没有被加载。

如果我这样加载工人:

pdfjsLib.GlobalWorkerOptions.workerSrc = `https://cdnjs.cloudflare.com/ajax/libs/pdf.js/$(pdfjsLib as any).version/pdf.worker.min.js`;

一切正常。

我查看了错误的 MDN 描述,听起来像是服务器端的东西,所以这是包裹服务器的限制吗?有解决方法吗?

【问题讨论】:

【参考方案1】:

这是由于错误的内容类型响应标头而发生的。

您的服务器正在响应内容类型为“text/html”的 javascript 文件,这是错误的。

将内容类型更改为“text/javascript”。

它应该可以正常工作。

更新(2019 年 4 月 11 日):

我假设您正在使用 http-server 的 express 框架。 可以使用中间件设置 content-type。

app.use('*.js', (req, res, next) => 
    res.set('Content-Type', 'text/javascript')
    next();
)

在静态文件服务中间件之前添加这个。

【讨论】:

我用谷歌搜索是否可以弄清楚如何更改现有 .js 文件的内容类型,但没有成功。我遇到问题的文件是 pdf.worker.min.js,它是 Mozilla PDFJS 项目预先构建的缩小文件。您能帮我解决如何更改缩小的 .js 文件的内容类型吗? 谢谢你的回答,但我不明白。我从 firebase 托管服务我的应用程序,它可以正常工作。我有一个使用 webpack 的项目,webpack 开发服务器也可以毫无问题地为 pdf.worker.min.js 提供服务。现在,在一个新的较小的项目中,我选择使用 Parcel,因为它看起来比 webpack 容易得多,但是 Parcel 开发服务器给我的问题是它不能提供 pdf.worker.min.js。所以我的问题在于包裹。【参考方案2】:

在您的网络服务器上检查该 .js 文件的文件权限。

我有一个类似的问题,加载我的一个 .js 文件失败并且 Firefox 打印了消息:

“https://my.website.com/file.js”中的脚本已加载,即使其 MIME 类型(“text/html”)不是有效的 JavaScript MIME 类型。

来源为“https://my.website.com/file.js”的<script> 加载失败。

所有其他 .js 文件都使用正确的内容类型“application/javascript”发送,但这个文件使用“text/html”发送。

问题是,在将文件传输到我的网络服务器(使用 FileZilla)时,文件的权限设置为 600。将文件权限设置为 705 修复了它。 .js 文件是现在以正确的内容类型发送,Firefox 消息消失了。

【讨论】:

我尝试使用“chmod 705 build/”(build 是包含 pdf.worker.min.js 的文件夹),但没有帮助。 你检查文件的权限是否真的改变了?要递归更新子文件夹和所有文件的权限,您需要将参数“-R”添加到 chmod。 How do I change permissions for a folder and all of its subfolders and files in one step in Linux? No "chmod -R 705 build/" 也无济于事。

以上是关于为啥我得到一个“df.worker.min.js”被加载,即使它的 MIME 类型(“text/html”)不是一个有效的 JavaScript MIME 类型”的主要内容,如果未能解决你的问题,请参考以下文章

为啥我得到一个零数组

为啥我得到一个“不允许的方法”

我得到一个断点,我不知道为啥

为啥我得到一个没有 IPAddress 的 docker 容器?

为啥我在 listView 中得到最后一个标题? [关闭]

为啥我得到分段(核心转储)?