拒绝执行脚本,是否启用了严格的 MIME 类型检查?

为什么我在控制台中得到这个错误?

拒绝执行脚本 “ https://www.googleapis.com/customsearch/v1?key=API_KEY&q=flower&searchType=image&fileType=jpg&imgSize=small&alt=json” 因为它的 MIME 类型(‘ application/json’)是不可执行的,而且 启用了严格的 MIME 类型检查。

499994 次浏览

您有一个 <script>元素,它试图加载一些外部 JavaScript。

您给它的 URL 指向一个 JSON 文件,而不是一个 JavaScript 程序。

服务器正确地报告它是 JSON,因此浏览器正在终止该错误消息,而不是尝试将 JSON 作为 JavaScript 执行(这将抛出一个错误)。


这种情况的潜在原因很可能是您正在尝试发出一个 Ajax 请求,遇到了一个 交叉原点误差交叉原点误差,并试图通过告诉 jQuery 您正在使用 JSONP 来修复它。这只有在 URL 提供 JSONP (这是 JavaScript 的一个不同子集)的情况下才有效,而这个 URL 没有提供 JSONP。

但是,带有额外查询字符串参数 callback=the_name_of_your_callback_function的同一 URL 确实会返回 JavaScript。

我通过在 jsp 路径中添加 ${ pageContext.request.contextPath }解决了这个问题。 而不是:

 <script    src="static/js/jquery-3.2.1.min.js"></script>

我设定:

 <script    src="${pageContext.request.contextPath}/static/js/jquery-3.2.1.min.js"></script>

在我的例子中,这是一个未找到的文件,我输入的 javascript 文件的路径是错误的。

这个结果是第一次在谷歌中弹出,比这里发生的更广泛。以下内容适用于 快递服务器:

我试图从一个嵌套文件夹访问资源。

index.html里面

<script src="./script.js"></script>

静态路线安装在:

app.use(express.static(__dirname));

但是 script.js是位于 嵌套文件夹的: js/myStaticApp/script.js refused to execute script, meme type checking is enabled. 我把静态路线改成了:

app.use(express.static(path.join(__dirname, "js")));

现在它起作用了:)

在我的例子中,404’d 文件有一个符号链接,我的 Tomcat 没有配置为允许符号链接。

我知道这不太可能是大多数人的原因,但如果你是绝望的,检查这种可能性只是以防万一。

如果您正在使用 Node.js,请尝试使用 Static ()

您只需要将保存静态资产的目录的名称传递给 Express.static 中间件,就可以开始直接为文件提供服务了。例如,如果将图像、 CSS 和 JavaScript 文件保存在一个名为 public 的目录中,则可以执行以下操作-

例如: Use (Express.static (‘ public’)) ;

这种方法解决了我的问题。

将如下所示的代码片段添加到 reactjs 中的条目 html. i.e“ index.html”中

<div id="wrapper"></div>
<base href="/" />

我不小心将 js 文件命名为 .min而不是 .min.js..。

巨蟒烧瓶

窗户上,它使用来自注册表的数据,因此,如果“ Content Type”值在 HKCR/。Js 没有设置为正确的 MIME 类型,这会导致您的问题。

打开 Regedit并转到 类别 _ 根目录,确保键 . js/Content Type的值为 Text/javascript

C:\>reg query HKCR\.js /v "Content Type"


HKEY_CLASSES_ROOT\.js
Content Type    REG_SZ    text/javascript

如果你有特快专线,例如:

app.get("*", (req, res) => {
...
});

试着把它改成更具体的东西:

app.get("/", (req, res) => {
...
});

比如说。

否则,您可能会发现自己一遍又一遍地递归地服务同一个 HTML 模板..。

我也有同样的问题,然后我就这样解决了

change "text/javascript"

type="application/json"

在搜索了一段时间后,我意识到我的 Windows1064位中的这个错误与 JavaScript 有关。为了看到这一点到您的浏览器 DevTools 和确认第一。在我的例子中,它显示了一个类似“ MIME 类型(‘ application/javascript’)不可执行”的错误。

如果是这样的话,我找到了一个解决办法:

  1. 借用 https://github.com/jupyterlab/jupyterlab/issues/6098上的用户“ ilango100”:

我之前也遇到过同样的问题。我认为这个问题是 Windows 特有的。这是由于在 Windows 注册表中为 javascript 文件设置了错误的 MIME 类型。我通过使用正确的内容类型编辑 Windows 注册表来解决这个问题:

Regedit-> HKEY _ LOCAL _ MACHINE Software Classes-> 每个文件扩展名都会有很多文件夹-> 向下滚动到“。在右边,如果“ Content Type”值不是 application/javascript,那么这就导致了问题。右键单击 Content Type 并将值更改为 application/javascript

在此输入图像描述

在浏览器中再试一次。”

在那之后,我意识到错误改变了。它甚至不会在浏览器中自动打开。然而,PGAdmin 将在侧边栏(靠近日历/时钟)打开。通过尝试在浏览器中直接打开(“新的 PGAdmin 4窗口...”) ,它也无法工作。

最终解决方案: 点击“拷贝服务器 URL”并粘贴到你的浏览器上。这对我很有效!

编辑: 复制服务器 URL 可能没有必要,正如 Eric Mutta 在下面的评论中所解释的那样。

我的网络服务器返回:

Content-Type: application\javascript

我怎么也想不明白是怎么回事。然后我意识到我把斜线划错了方向。它应该是:

Content-Type: application/javascript

我的问题是,我一直将 CSS 文件放在脚本定义区域的正上方 尝试检查页面中的文件点

对我来说,我在研究遗留代码

我有一行代码

<script type="text/javascript" src="js/i18n.js.php"></script>

我对这段代码是如何工作的感到困惑,因为它调用的是 PHP 文件而不是 js

尽管它是在服务器上运行的

但是我在舞台服务器上有个错误

内容类型为

content-type: text/html; charset=UTF-8

enter image description here

甚至在 script 标记中也是 Text/javascript

在我加入之后

header('Content-Type: text/javascript');

在文件 I18n.js.php的开头

错误已修正

enter image description here

在我的情况下(反应应用程序) ,只要强制清除缓存,它的工作。

在我的例子中,SpringSecurity 在允许调用外部库之前寻找身份验证。我有一个文件夹/dist/。.当我将文件夹添加到 WebSecurityConfig 类中的忽略列表时,它工作得很好。

web.ignoring().antMatchers("/resources/**", "/static/**", "/css/**", "/js/**", "/images/**", "/error", "/dist/**");

检查 script标记中是否有空的 src

在我的例子中,我是从脚本(在我的例子中是 php)动态填充 src,但是在特定的例子中,src保持为空,这导致了这个错误。外面是这样的:

 <script src=""></script> //empty src causes error

因此,我没有在 script标记中使用空的 src,而是将 script 标记全部移除。 大概是这样:

if($src !== ''){
echo '<script src="'.$src.'"></script>';
}

我使用的是 SpringMVC + tomcat + React

@ Anfuca 的回答对我不起作用(强制清除浏览器的缓存)

我使用过滤器转发特定的网址模式的反应的 index.html

public class FrontFilter extends HttpFilter {
@Override
protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {
boolean startsWithApi = requestURI.startsWith("/api/");
boolean isFrontendUri = requestURI.startsWith("/index.html");


if (!startsWithApi && !isFrontendUri) {
req.getRequestDispatcher("/index.html").forward(req, res);
}


super.doFilter(wrapped, res, chain);
}
}

在 SpringSecurity 之前,我的过滤器没有执行任何 SpringSecurity 问题

但我仍然看到相同的错误,并在这里找到

然后我意识到我忘了为 JS 和 CSS 增加一个条件:

boolean startsWithStatic = requestURI.startsWith(contextPath + "/static");

将此添加到我的 if 条件和问题已解决,MIME 类型或 js 和 css (‘ text/html’)不再有错误

根本原因是我错误地将 JS 和 CSS 类型转发到 HTML 类型

在我的例子中,在执行打印脚本文件时, 我写道:

<script src="./script.ts"></script>

而不是:

<script src="./script.js"></script>

我也犯了同样的错误。我发现我的应用程序在另一个文件夹里。我只是将它移动到 index.html 文件所在的文件夹中,然后它就解析了。