Javascript HTML5标记、事件和属性支持测试

Javascript HTML5标记、事件和属性支持测试,javascript,browser,html,Javascript,Browser,Html,有没有人有一个简单的方法来测试HTML5标记、事件或属性的存在?我基本上想做的是对其中一个或多个进行浏览器测试。我很清楚像Modernizer这样的项目,但是我需要一些非常具体的东西 例如,为这些模拟函数提供功能的Javascript将是理想的: bool IsHTML5TagSupported( tag ) bool IsHTML5EventSupported( event ) bool IsHTML5AttributeSupported( attribute ); 更新:这里有一些很好的参

有没有人有一个简单的方法来测试HTML5标记、事件或属性的存在?我基本上想做的是对其中一个或多个进行浏览器测试。我很清楚像Modernizer这样的项目,但是我需要一些非常具体的东西

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

bool IsHTML5TagSupported( tag )
bool IsHTML5EventSupported( event )
bool IsHTML5AttributeSupported( attribute );
更新:这里有一些很好的参考资料,但绝对不能完全涵盖诸如article、nav、header等标记以及事件和所有属性。

有一个isEventSupported
函数,属性测试非常简单(看看Modernizer代码中的
函数webforms()
中的第一个测试)

当涉及到支持标签“如文章、导航、标题等”时,我怀疑您是否真的需要对此进行测试。如果暂时不考虑IE,那么支持
文章的浏览器和不支持
文章的浏览器之间的区别在于前者将为元素提供一些默认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
行,尽管我们可以确定它不支持它。显然,这种特殊的方法只适用于本应为块级别的元素,但您可以扩展它以查看其他元素的不同属性。当然,调用
document.createElement('article')
将导致IE将用户样式应用于后续的
article
元素,并且在样式表中具有
article{display:block;}
将导致所有浏览器“支持”
article
元素


也许要测试的一件更有趣的事情是遵循,因为这可能会对您在脚本中处理的DOM树以及您是否能够执行类似的操作产生一些影响。为此,请查看源代码中的
testParsing
函数。

为什么不看看Modernizer是如何进行检测的呢?:)这些函数看起来像Java。。。我不认为这是理想的;否则尼克+1。@Ivo:不,他们没有。Java没有
bool
关键字或
字符串。你的意思是说它应该是
isHTML5…
,或者
html5.supportsAttribute(…)
@SLaks现在是凌晨3点,如果你需要一大杯咖啡,一切看起来都像Java。。。是的,我想它们应该以小写字母开头。你能定义“支持”吗?例如,如果浏览器正确选择适当的包含标题元素作为标题公开给O/S的可访问性API,是否仅“支持”hgroup元素?如果没有,什么?你如何让这些API的作者同意你的观点?很好的反馈。我将更深入地研究这个问题。