如何使用 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 = "&lt;!....") @BradKoch - 这正是我得到我现在正在使用的代码的地方,但它以字符串的形式返回它,而不是简单地检测它的存在。 现在,这段代码或许可以工作了,就像我在Edit 中所说的那样,比如条件语句在语法上是错误的。 【参考方案1】:

document.doctypenull 当没有文档类型时,因此你的错误。调整你的方法以在这种情况下返回 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 但是&lt;!DOCTYPE html SYSTEM "about:legacy-compat"&gt; 也是根据totalvalidator.com/support/doctypes.html 有效的HTML5 文档类型

以上是关于如何使用 JavaScript 检测文档中是不是存在 HTML5 有效的文档类型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在客户端使用 JavaScript 来检测页面是不是已加密?

使用 JavaScript,如何检测访问者的设备上是不是存在三星 Galaxy 商店

如何在浏览器 JavaScript 中检测 OS X 是不是处于暗模式? [复制]

如何检测 JavaScript 中的哈希后 URL 是不是已更改

如何检测 jQuery 是不是在 WinForm WebBrowser 控件中导航到的文档中?

如何在javascript中检测浏览器选项卡是不是关闭或浏览器窗口