如何使用JavaScript检测文档中是否存在HTML5有效的doctype?

时间:2012-12-15 23:29:22

标签: javascript html5 parsing dom doctype

我想知道是否只是一种方法来检测是否存在doctype - 最好只是HTML5 doctype。我不想在字符串或任何内容中返回它(虽然我已经尝试过这个问题,在这里提出类似问题,请参阅下面的代码),而我只是想看看它是否不存在。例如,如果不存在,请拨打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的错误控制台会捕获它并显示错误。也许我的条件语句的语法不正确?

1 个答案:

答案 0 :(得分:4)

当没有doctype时,

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>';
};