为啥我得到一个“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 类型”的主要内容,如果未能解决你的问题,请参考以下文章