javascript - 无论在哪里使用,我如何触发图像重新加载(CSS 背景图像、伪元素、样式属性、img 标签)

标签 javascript css image dom livereload

我正在尝试设置一个 livereload 服务器,当它们在磁盘上发生变化时重新加载图像 Assets 。没有页面刷新,只有媒体文件,重新加载。

问题是这些 Assets 可能以很多不同的形式出现:

  • <style> CSS background-image: url('http://localhost:8080/myasset.png');
  • <link> CSS background: url('http://localhost:8080/myasset.png') no-repeat 50%;
  • style属性 background-image
  • ::before/::after伪元素CSS
  • <img>来源,srcset
  • <video>来源,<source>资源
  • 等等

<img> src 更新很容易

var liveUrl = imgTag.getAttribute('src');
liveUrl = __addUrlQueryParam(liveUrl, '_lf', Date.now());
imgTag.setAttribute('src', liveUrl);

但是尝试以这种方式为 CSS 样式声明或伪元素更新 URL……听起来非常令人沮丧。

是否可以使用替代技术在整个页面上普遍触发资源重新加载?

只有 URL 字符串是已知的。使用它的元素不是。它必须以某种方式在 DOM 中搜索元素,找到 URL 出现的样式声明,并能够将该样式声明设置为带有 ?_lf=1493306569919 的 URL。附加。此外,它可能不在 styleSheets 中。因为它在 DevTools 中被覆盖了。所以只是window.getComputedStyles ,但这是只读的。和 .getMatchedCSSRules已弃用且仅限 WebKit。

最佳答案

live-server似乎具有所需的行为。

运行 live-server --wait=100 --port=80 --host=livereload . 的 react 方式与我的其他答案中的演示相同:

Demo of live asset reloading feature: what works in my fork of gulp-server-livereload works in live-server too

关于javascript - 无论在哪里使用,我如何触发图像重新加载(CSS 背景图像、伪元素、样式属性、img 标签),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668154/

相关文章:

javascript - react native : transparent view inside opaque view

javascript - 有条件地加载 JavaScript 资源

css - 如何轻松提取 CSS 样式表文件中的所有媒体查询?

javascript - 减少水平条形图 chartJS 中刻度线之间的空间

php - 刷新图像 PHP 和 Javascript

python - 计算数组中的像素

javascript - Firebase 模拟器错误 : Channel credentials must be a ChannelCredentials object

javascript - ReactJs 中 JSON 的 GridView 格式

javascript - 在图标上动态添加 UI Bootstrap Popover?

html - Bootstrap - 是否可以根据列大小调整图像大小?