动态改变video(或audio)标签的子级标签,source中的src属性,不起作用问题
这个问题可能是因为浏览器缓存导致的。当你更改<source>
标签的src
属性后,浏览器可能会使用缓存中的数据,而不是加载新的资源。
解决方法:
- 更改
<source>
标签的其他属性,如media
,来强制浏览器重新加载资源。 - 在更新
src
属性后,可以先移除所有<source>
标签,再重新添加它们。 - 可以尝试在更新
src
后添加一个随机的查询参数到<source>
的src
属性上,以禁用缓存。
示例代码:
// 假设videoTag是你要更改的video标签
var videoTag = document.querySelector('video');
// 方法1: 更改media属性
videoTag.querySelectorAll('source').forEach(function(source) {
source.media = '(max-width: 300px)'; // 这个媒体查询不会匹配任何设备,强制重新加载
});
// 方法2: 先移除所有source标签,再添加
var sources = videoTag.querySelectorAll('source');
sources.forEach(function(source) {
videoTag.removeChild(source);
});
videoTag.appendChild(document.createElement('source')); // 添加新的source标签
// 方法3: 添加随机查询参数
videoTag.querySelectorAll('source').forEach(function(source) {
source.src += '?t=' + Math.random(); // 添加随机查询参数
});
选择哪种方法取决于你的具体需求和你希望如何处理缓存。通常,添加随机查询参数是一种简单而又有效的方法。
评论已关闭