在将 html 注入 DOM 时,为什么没有获取 js 文件?



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

我的理解是.cshtml文件被呈现并作为原始html返回到浏览器。然后,浏览器会解析此内容并查找具有指向静态文件的路由的任何链接或脚本标记,并在注入 DOM 后发送对这些资源的 get 请求。

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

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

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

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

无论如何,感谢任何可以提供一些见解的人。对于我随身携带这个问题的任何无知,我们深表歉意。只是想学习。

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

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

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

最新更新