【问题标题】:When injecting html into the DOM, why are js files not obtained?将html注入DOM时,为什么没有获取到js文件?
【发布时间】:2019-02-26 23:18:52
【问题描述】:

我正在为我正在开发的登录过程从浏览器发起一个 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 架构完全集成的登录页面可能会有一些反对意见,所以 here is why I think it’s perfectly fine.

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

【问题讨论】:

  • 这里的关键是“我将它注入 DOM”。你怎么做这个注射?如果它是通过 innerHTML 或类似的,则包含的脚本不会被获取或运行。就是这样。我不知道有什么特别的原因,除了现在需要向后兼容。可能是出于安全原因。
  • 它是通过innerHTML。
  • 感谢您的信息。有没有办法解决这个问题?还是您能想到的不同方法?
  • 这可能是因为浏览器正在阻止跨站点脚本攻击,它认为是这样的。

标签: javascript html asp.net ajax xmlhttprequest


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-10
    • 2020-11-13
    • 1970-01-01
    相关资源
    最近更新 更多