javascript - 测试 HTML5 标签、事件和属性支持

标签 javascript browser html

有没有人有万无一失的方法来测试 HTML5 标签、事件或属性的存在?我基本上想做的是浏览器测试其中的一个或多个。我很了解像 modernizr 这样的项目,但是我需要一些非常具体的东西。

例如,为这些模拟函数提供能力的 Javascript 将是理想的:

bool IsHTML5TagSupported( tag )
bool IsHTML5EventSupported( event )
bool IsHTML5AttributeSupported( attribute );

更新:这里有一些很好的引用 http://diveintohtml5.ep.io/everything.html ,但绝不完全涵盖文章、导航、标题等标签以及事件和所有属性。

最佳答案

Modernizr有一个函数用于 isEventSupported 并且属性测试非常简单(查看 modernizr 代码中 function webforms() 中的第一个测试)。

当谈到支持标签“如文章、导航、标题等”时,我怀疑您是否真的需要对此进行测试。如果我们暂时撇开 IE,支持 article 的浏览器和不支持的浏览器的区别在于,前者会为元素提供一些默认的 CSS。由于您可以只提供自己的 CSS(display: block; 加上您无论如何要提供的任何样式),所以很难看出您可能需要检测支持的地方。

如果您仍然热衷于测试对这些元素的支持,您可以只查找那些默认样式,例如:

function IsHTML5TagSupported(tag) {
    var t = document.createElement(tag);
    document.body.appendChild(t);
    var ret;
    if (window.getComputedStyle) ret = window.getComputedStyle(t, null).getPropertyValue("display") == 'block';
    if (t.currentStyle) ret = t.currentStyle.display == 'block';
    document.body.removeChild(t);
    return ret;
}

window.alert(IsHTML5TagSupported('article'));

您实际上需要为浏览器附加元素以计算样式,并且我已经为 IE 添加了 currentStyle 行,尽管我们可以确定它不支持它。显然,这种特殊方法仅适用于应该是 block 级的元素,但您可以扩展它以查看其余元素的不同属性。当然,调用 document.createElement('article') 将导致 IE 将用户样式应用到后续的 article 元素并具有 article { display: block; 在您的样式表中将导致所有浏览器“支持”article 元素。

也许更有趣的测试是遵守 HTML5 parsing algorithm ,因为这可能会对您在脚本中处理的 DOM 树产生一些影响,以及您是否能够执行类似 insert inline SVG 的操作。 .查看The HTML5 Test 源代码中的testParsing 函数为此。

关于javascript - 测试 HTML5 标签、事件和属性支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4551037/

相关文章:

javascript - 在 PhoneGap 中调用 window.location.href 触发网络浏览器

http - 浏览器是否应该自动处理 304 响应?

jquery - 按钮与 HTML 中的可点击 Div

java - 谷歌眼镜 : Performing "Click" event or something similar

javascript - Three.js 中的粒子

javascript - 通过云码删除解析文件

javascript - Vanilla JS 相当于 jQuery $.once()?

css - css 位置 IN/FF 的差异,如何解决我的问题?

javascript - 帧源变化检测

javascript - 使用 Javascript 将 HTML 页面转换为图像