注册 ServiceWorker 失败:脚本具有不受支持的 MIME 类型 ('text/html')

Posted

技术标签:

【中文标题】注册 ServiceWorker 失败:脚本具有不受支持的 MIME 类型 (\'text/html\')【英文标题】:Failed to register a ServiceWorker: The script has an unsupported MIME type ('text/html')注册 ServiceWorker 失败:脚本具有不受支持的 MIME 类型 ('text/html') 【发布时间】:2019-02-15 12:51:03 【问题描述】:

脚本具有不受支持的 MIME 类型 ('text/html')。加载资源失败:net::ERR_INSECURE_RESPONSE (index):1 Uncaught (in promise) DOMException: Failed to register a ServiceWorker: 该脚本具有不受支持的 MIME 类型('text/html')。

template.js 根文件的代码

export default ( markup, css ) => 
  return `<!doctype html>
      <html lang="en">
        <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
          <title>MERN Marketplace</title>
          <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400">
          <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
          <style>
              a
                text-decoration: none
              
          </style>
          <link rel="manifest" href="./manifest.json">
        </head>
        <body style="margin:0">
            <div id="root">$markup</div>
          <style id="jss-server-side">$css</style>

          <script id="stripe-js" src="https://js.stripe.com/v3/" async></script>
          <script type="text/javascript" src="/dist/bundle.js"></script>
          <script>
          if ('serviceWorker' in navigator) 
            navigator.serviceWorker.register('/sw.js').then(function()  
              console.log("Service Worker Registered"); 
            );
          
          </script>
        </body>
      </html>`;
;

【问题讨论】:

Service Worker 不能在 HTTP 站点上工作,即使是在本地,你必须使用 ngrok.com 之类的东西才能在 https 站点上进行本地测试 感谢您的评论,但我知道 HTTPS 要求有一个例外以促进本地开发:如果您通过localhost[:port] 或通过127.x.y.z[:port] 访问您的页面和服务工作者脚本,那么应该启用服务工作者,而无需任何进一步的操作。 这里有一个可能是问题的烦恼。如果返回 404,您仍然会收到 MIME 类型 ('text/html') 错误。刚刚花了一个小时来处理这个问题 :( 确保工作人员的路径相对于来源你编译的 js 的 html 文档进行解析。 【参考方案1】:

根据我的个人经验,我只是确保 sw.js 文件与 index.html 位于同一文件夹中。

【讨论】:

以上是关于注册 ServiceWorker 失败:脚本具有不受支持的 MIME 类型 ('text/html')的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 无法使用脚本为范围注册 ServiceWorker,该脚本具有不受支持的 MIME 类型

“未捕获(承诺)的DOMException:无法为范围注册ServiceWorker”-脚本资源位于重定向后面,不允许使用

将 Firebase FCM 添加到 reactjs 应用程序

如何通过 cdn 脚本注册 service worker。如何使用外部 url 注册 service worker

Chrome 扩展后台脚本如何与网页服务工作者通信?

注册 ServiceWorker 返回 AbortError code:20