如何使用 JavaScript 检测文档中是不是存在 HTML5 有效的文档类型?
Posted
技术标签:
【中文标题】如何使用 JavaScript 检测文档中是不是存在 HTML5 有效的文档类型?【英文标题】:How to detect if an HTML5 valid doctype is present in the document using JavaScript?如何使用 JavaScript 检测文档中是否存在 HTML5 有效的文档类型? 【发布时间】:2012-12-03 13:06:30 【问题描述】:我想知道是否有一种简单的方法来检测是否存在 doctype
- 最好是 html5 文档类型。我不想以字符串或任何东西的形式返回它(尽管我已经尝试过这里提出的类似问题,请参见下面的代码),我只想看看它是否不存在。比如,如果它不存在,调用alert
,然后调用return false
,或者如果它存在,调用一个接受函数。
就像我之前说的,我已经阅读了这里的其他帖子和其他论坛上的其他帖子,但似乎没有一个与我的答案相符,或者我可能对代码的解释有误,如果是,请告诉我。
我已经尝试过的代码如下:
var msg =
noHTML5: "You're pages document type is either not defined or not compliant with HTML5."
,
node = document.doctype,
thisNodeHTML = "<!DOCTYPE " + node.name + (node.publicId ? ' PUBLIC"' + node.publicId + '"' : '') + (!node.publicId && node.systemId ? ' SYSTEM' : '') + (node.systemId ? ' "' + node.systemId + '"' : '') + ">";
if(!thisNodeHTML)
alert(msg.noHTML5);
return false;
else
// success = true;
编辑:
但是,我确实注意到,一旦我删除了 html 文件中的 doctype,Chrome 的错误控制台就会捕获它并显示错误。也许我的条件语句的语法不正确?
【问题讨论】:
可能重复:Get DocType of an HTML as string with javascript Chrome 控制台中的错误显示为:Uncaught TypeError: Cannot read property 'name' of null
就在第 29 行下方 (thisNodeHTML = "<!...."
)
@BradKoch - 这正是我得到我现在正在使用的代码的地方,但它以字符串的形式返回它,而不是简单地检测它的存在。
现在,这段代码或许可以工作了,就像我在Edit
中所说的那样,比如条件语句在语法上是错误的。
【参考方案1】:
document.doctype
是 null
当没有文档类型时,因此你的错误。调整你的方法以在这种情况下返回 false,你应该很好。样本检测函数,基于doctype:
var is_html5 = function ()
if (document.doctype === null) return false;
var node = document.doctype;
var doctype_string = "<!DOCTYPE " + node.name + (node.publicId ? ' PUBLIC"' + node.publicId + '"' : '') + (!node.publicId && node.systemId ? ' SYSTEM' : '') + (node.systemId ? ' "' + node.systemId + '"' : '') + ">";
return doctype_string === '<!DOCTYPE html>';
;
【讨论】:
哈,哈!这就是我所做的。使用if(thisNodeHTML == null || thisNodeHTML == "" || !thisNodeHTML) ...
。谢谢!!
唯一的问题是,如果没有文档类型,由于严重错误,我无法显示alert
,此后不再解析与thisNodeHTML
相关的代码。有没有办法绕过这个错误?
我将我的测试函数粘贴到我的回答中(在 Chrome v24 中测试)。我猜你正在检查 document.doctype === null 是否为时已晚?
是的,就是这样!谢谢你。 :-D
但是<!DOCTYPE html SYSTEM "about:legacy-compat">
也是根据totalvalidator.com/support/doctypes.html 有效的HTML5 文档类型以上是关于如何使用 JavaScript 检测文档中是不是存在 HTML5 有效的文档类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何在客户端使用 JavaScript 来检测页面是不是已加密?
使用 JavaScript,如何检测访问者的设备上是不是存在三星 Galaxy 商店
如何在浏览器 JavaScript 中检测 OS X 是不是处于暗模式? [复制]
如何检测 JavaScript 中的哈希后 URL 是不是已更改