首页 > 解决方案 > 将html注入DOM时,为什么没有获取到js文件?

问题描述

我正在为我正在开发的登录过程从浏览器发起一个 ajax 发布请求。我做了一些逻辑来验证后端(asp.net 核心)中的用户凭据并返回一个视图,即应用程序“登录后”主页。我将它注入到 DOM 中。我返回的这个视图有一个指向外部 js 文件的脚本标记以及一个用于 css 的链接标记。

我的理解是 .cshtml 文件被渲染并作为原始 html 返回到浏览器。浏览器然后解析它并查找任何具有到静态文件的路由的链接或脚本标签,并在将这些资源注入 DOM 后发送获取这些资源的请求。

在firefox中查看网络登录时,登录post请求成功,返回“登录后”页面,然后发送css的get请求并成功......然后什么都没有......我的脚本标签正确命名并且没有发现错误。它应该发送对 html 中链接的 Js 的请求。

由于这个问题,我创建了一个克隆应用程序,但我没有以 SPA 方式实现这个请求周期,而是在考虑 MPA 架构的情况下实现它。使用 html 表单来执行发布请求。这样确实成功了,并且收到了css和js外部文件。

我在这里的最终困惑是为什么浏览器会启动对 css 文件而不是 js 文件的请求。客户端或服务器端是否有一些黑魔法正在使这种情况发生?这显然与正在使用的 Ajax 请求有关,甚至与我将原始 html 注入 DOM 的事实有关。

我知道使用与 SPA 架构完全集成的登录页面可能会有一些反弹,所以 这就是为什么我认为它非常好。

无论如何,感谢任何可以提供一些见解的人。对我提出这个问题的任何无知表示歉意。只是想学习。

标签: javascripthtmlasp.netajaxxmlhttprequest

解决方案


我将引用@alohci 的评论中的一些内容。

如果它是通过 innerHTML 或类似的,则包含的脚本不会被获取或运行。

事实证明,这对我所经历的来说是正确的。更新 DOM 实际上只是为了实时注入 HTML。我试图用包含脚本标签的 HTML 更新 DOM 并期望这些脚本被加载的方式确实是错误的路径。做这样的事情比看起来要复杂得多,因为 chrome 试图阻止 XSS。我将此标记为答案,因为它解释了我遇到问题的原因。我不再寻找修复程序,但如果有人阅读本文遇到解决方案,请发布解决方案。感谢所有回复的人。


推荐阅读