javascript - 当你用 JavaScript 改变 DOM 时,浏览器会获取新的资源吗?

标签 javascript browser dynamic-content cross-site

我的页面 HTML 正文中有以下内容:

   <aside id="ADVERT">
      <img src='https://www.blackstone.com/images/default-source/assets/logos/blackstone-logo.png'>
   </aside>

在页面的后面,有一个按钮,单击该按钮可以将图像与另一个图像切换。这是按钮代码:

   <button onclick="switchadvert();">Switch Logo</button>

这个 switchadvert Javascript 函数本身很简单,只有一行,使用innerHTML 属性:

   function switchadvert()
   { document.getElementById("ADVERT").innerHTML = "<img src='http://www.redstone.com/gfx/logo.png'>";
   }

这一切似乎都有效。当我单击该按钮时, Logo 从 Blackstone Group 的 Logo 更改为 Redstone 的 Logo 。

我的问题是它是如何工作的,为什么会起作用?

如何: 显然,一旦我用这个新的innerHTML更新DOM,浏览器就会意识到页面的这一部分需要它没有的资源(红石 Logo )并去获取它?页面加载后很长时间?

原因: 我认为即使我不厌其烦地对 XMLHttpRequest 对象进行 AJAX 调用,在页面加载后我也不允许从另一个站点获取资源。但这里它是在没有任何调用的情况下完成的!这不会为跨站点脚本滥用打开大门吗?

最佳答案

对于<img>问题,浏览器如何知道它必须获取新资源,这就是 what does the HTMLImageElement当它src时属性已设置。
何时发生这种情况并不重要,甚至不需要将元素附加到文档中;当您设置此 src 时,其获取算法将启动。

对于跨域问题,这与请求的时间无关。但要澄清另一个误解,跨域限制是为了避免脚本能够访问跨域数据,但您仍然可以很好地在页面中显示跨域数据。在这里,因为您没有设置 cross-origin您的<img>的属性,那么您将无法访问该图像的内容。

关于javascript - 当你用 JavaScript 改变 DOM 时,浏览器会获取新的资源吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53221130/

相关文章:

javascript - 如何在 Android 屏幕锁定时让 html 5 音频继续播放 HLS 音频?

javascript - 将类添加到动态添加的元素

javascript - 在 Puppeteer 中连接浏览器

javascript - 如何将数据从 EJS 模板传递到 AngularJS Controller

javascript - 如何使用 CSS 创建马蹄形仪表

javascript - 加载文档时的全屏浏览器窗口

javascript - 为什么从 Vue.js 中挂载的钩子(Hook)发送的 AJAX GET 请求总是忽略浏览器缓存?

eclipse - 无法访问 ActiveMQ Web 控制台

javascript - 无法使用 PHP 从 CollegeBoard 获取内容