如果我有HTML5 VIDEO标记但在元素中既不包含SRC属性也不包含SOURCE标记,是否有任何已定义的行为?这仍然是有效的HTML,如果是这样,(HTML5能力)浏览器应该做什么 - 忽略该元素或显示它的内容?
是的,有明确的行为; HTML5试图为任何可能在浏览器之间产生差异的情况提供定义的行为,以减少不兼容性,即使在处理无效文档时也是如此.
根据我对规范的阅读,看起来没有src属性或source元素是无效的:
内容模型:
如果元素具有src属性:transparent,但没有媒体元素后代.
如果元素没有src属性:一个或多个源元素,则透明,但没有媒体元素后代.
这似乎向我表明它必须具有src属性或source子元素.但是Validator.nu和W3C Validator似乎都认为这是一个有效的文档:
<!DOCTYPE html>
<title>Video test</title>
<video></video>
Run Code Online (Sandbox Code Playgroud)
无论它是否有效,行为都在资源选择算法中定义如下:
⌛否则,media元素既没有src属性也没有source元素子元素:将networkState设置为NETWORK_EMPTY,并中止这些步骤; 同步部分结束.
这意味着准备状态 HAVE_NOTHING
HAVE_NOTHING(数值0)
没有关于媒体资源的信息.当前播放位置没有数据可用.networkState属性所在的媒体元素NETWORK_EMPTY始终处于HAVE_NOTHING状态.
在该状态下,视频由其海报框架表示,或者什么都不是:
当没有可用的视频数据时(元素的readyState属性是
HAVE_NOTHING,或者HAVE_METADATA根本没有获得视频数据),视频元素代表海报帧,或者什么都没有.
如果没有任何表示,那就意味着它只是一个通用的盒子; 像a一样div,可以设置风格,但没有自己的内在显示,尽管它将是由它width和height属性指定的宽度和高度.例如:
<!DOCTYPE html>
<video width=100 height=100
style="border-width: 1px; border-color:black; border-style: solid;
background: green">
foobar
</video>
Run Code Online (Sandbox Code Playgroud)
请注意,在支持该video标记的浏览器中,它不会显示其内容.video除了source元素之外,标记内的内容旨在成为仅由不支持该video元素的旧浏览器显示的后备内容:
可以在视频元素内提供内容.用户代理不应向用户显示此内容; 它适用于不支持视频的旧版Web浏览器,因此可以尝试使用旧版视频插件,或向这些旧版浏览器的用户显示文本,告知他们如何访问视频内容.