【发布时间】:2010-12-28 23:49:50
【问题描述】:
如果我有一个 HTML5 VIDEO 标签但在元素内既不包含 SRC 属性也不包含 SOURCE 标签,是否有任何定义的行为?这仍然是有效的 HTML,如果是,(支持 HTML5 的)浏览器应该做什么 - 忽略元素或显示它的内容?
【问题讨论】:
如果我有一个 HTML5 VIDEO 标签但在元素内既不包含 SRC 属性也不包含 SOURCE 标签,是否有任何定义的行为?这仍然是有效的 HTML,如果是,(支持 HTML5 的)浏览器应该做什么 - 忽略元素或显示它的内容?
【问题讨论】:
是的,有定义的行为; HTML5 试图为可能在浏览器之间产生差异的任何情况提供定义的行为,以减少不兼容性,即使在处理无效文档时也是如此。
从我对the spec的阅读来看,似乎没有src属性或source元素是无效的:
内容模型:
如果 元素有一个 src 属性: 透明,但没有媒体元素 后代。
如果元素没有 有一个 src 属性:一个或多个 源元素,然后,透明的, 但没有媒体元素 后代。
这似乎向我表明它必须具有src 属性或source 子元素。但Validator.nu 和W3C Validator 似乎都认为这是一份有效的文件:
<!DOCTYPE html>
<title>Video test</title>
<video></video>
不管是否有效,行为在resource selection algorithm中定义如下:
⌛ 否则媒体元素有 既不是 src 属性也不是源 子元素:将networkState设置为 NETWORK_EMPTY,并中止这些步骤; 同步部分结束。
这意味着HAVE_NOTHING处于就绪状态
HAVE_NOTHING(数值 0)
没有关于媒体的信息 资源可用。没有数据 当前播放位置是 可用的。媒体元素 networkState 属性是NETWORK_EMPTY总是在HAVE_NOTHING状态。
在那种状态下,视频由它的poster frame 表示,或者什么都没有:
当没有视频数据可用时( 元素的 readyState 属性是
HAVE_NOTHING,或HAVE_METADATA但没有视频数据 尚未获得),视频 元素代表海报 框架,或者什么都没有。
当它什么都没有表示时,这意味着它只是一个通用框;就像div,可以设置样式但没有自己的内在显示,尽管它将是由其width 和height 属性指定的宽度和高度。 For example:
<!DOCTYPE html>
<video width=100 height=100
style="border-width: 1px; border-color:black; border-style: solid;
background: green">
foobar
</video>
请注意,在支持video 标签的浏览器中,它不会显示其内容。 video 标记中的内容(source 元素除外)旨在作为仅由不支持 video 元素的旧浏览器显示的后备内容:
内容可以在 视频元素。用户代理不应该 向用户显示此内容;它是 适用于较旧的 Web 浏览器 不支持视频,所以遗留 视频插件可以尝试,或者显示 给这些老年人的用户发短信 浏览器通知他们如何 访问视频内容。
【讨论】:
我猜如果找不到视频,就会显示内容,在你的情况下,它甚至没有指定。但我也假设 src 属性对于标签有意义是强制性的,就像 img 标签一样。所以没有它就不会有效,但它可以默认链接一个不存在的视频..
重要的是要记住,无论规范如何,浏览器都会以不同的方式实现事物,因此您只需拭目以待。
【讨论】: