4

我想知道是否有一种简单的方法来检测 adoctype是否存在 - 最好只有 HTML5 文档类型。我不想以字符串或任何东西的形式返回它(尽管我已经尝试过这里提出的类似问题,请参见下面的代码),我只想看看它是否不存在。比如,如果它不存在,调用一个alert, then 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 的错误控制台就会捕获它并显示错误。也许我的条件语句的语法不正确?

4

1 回答 1

4

document.doctypenull当没有文档类型存在时,因此您的错误。调整你的方法以在这种情况下返回 false,你应该很好。样本检测函数,基于文档类型:

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>';
};
于 2012-12-15T23:43:23.993 回答