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


Answers:


58

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

您提供的URL指向JSON文件,而不是JavaScript程序。

服务器正确报告它是JSON,因此浏览器将中止该错误消息,而不是尝试将JavaScript作为JavaScript执行(这将引发错误)。


造成这种情况的根本原因是,您试图发出Ajax请求,遇到跨源错误并试图通过告诉jQuery您正在使用JSONP来解决该错误。仅当URL提供JSONP(这是JavaScript的不同子集)时,此方法才有效。

带有附加查询字符串参数的相同URLcallback=the_name_of_your_callback_function确实会返回JavaScript。


4
我现在给出了它,它修复了错误<script id =“ data” type =“ application / json”
rob.m 2016年

2
type="application/json"—现在,浏览器知道它没有尝试加载JavaScript,因此它完全忽略了script元素。
昆汀

58

在我的情况下,这是一个找不到文件的文件,我没有正确输入javascript文件的路径。


8
相同。不正确的路径会导致一些错误的html页面响应,从而导致此令人困惑的错误消息。
吉尔·罗伊托

2
温柔的答案。谢谢您:)
Anjana Silva

21

这个结果是第一个在Google中弹出的结果,它的作用范围比这里发生的要广泛。以下内容适用于快递服务器

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

index.html我有里面

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

静态路由安装在:

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

但是script.js,该文件位于嵌套文件夹中,如下所示:js/myStaticApp/script.js 拒绝执行脚本,启用了模因类型检查。 我只是将静态路由更改为:

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

现在可以了:)


6

如果使用的是Node.js,请尝试使用express.static()

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

即:app.use(express.static('public'));

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

谢谢,


可能不是这个特定问题的正确答案,但这是我的问题的解决方案。谢谢!
mcheah '18


1

蟒蛇烧瓶

Windows上,它使用注册表中的数据,因此,如果HKCR / .js中的“内容类型”值未设置为正确的MIME类型,则可能会引起问题。

打开regedit并转到HKEY_CLASSES_ROOT,确保键.js / Content Type的值为text / javascript

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

HKEY_CLASSES_ROOT\.js
    Content Type    REG_SZ    text/javascript

1

经过一段时间的搜索后,我意识到Windows 10 64位中的此错误与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->您将看到每个文件扩展名的文件夹很多->只需向下滚动到“ .js”注册表并选择它->在右侧,如果“ Content Type”值不是应用程序/ javascript,那么这就是问题所在。右键单击内容类型,然后将值更改为application / javascript

在此处输入图片说明

在浏览器中重试。”

之后,我意识到错误发生了变化。它甚至不会在浏览器中自动打开。但是,PGAdmin将在侧栏上打开(靠近日历/时钟)。通过尝试直接在浏览器中打开(“ New PGAdmin 4窗口...”),它也不起作用。

最终解决方案:单击“复制服务器URL”,然后将其粘贴到浏览器中。它为我工作!



-1

如果您有快递路线,例如:

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

尝试将其更改为更具体的内容:

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

例如。

否则,您可能会发现自己一次又一次地递归地提供相同的HTML模板...


-1

我有同样的问题,然后我像这样固定

change "text/javascript"

type="application/json"

2
这样一来,浏览器便会停止对URL的请求,并使script元素在文档中的存在完全毫无意义。
昆汀

-1

在我的情况下,我有一个用于404文件的符号链接,而Tomcat未配置为允许符号链接。

我知道对大多数人来说这不太可能是原因,但是如果您拼命,请检查这种可能性以防万一。


-2

我有同样的问题,问题是我在路径中缺少斜线。

我有

并解决它,我只需要在jquery-ui和jquery-ui.min之间添加斜杠:

  <script type="text/javascript" src="js/jquery-ui/jquery-ui.min.js"></script>

希望这会有所帮助:D


-12

我通过在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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.