4

が存在するかどうかを単に検出する方法があるのではないかと思っていました。できればdoctypeHTML5Doctypeのみです。文字列などで返したくはありません(ここで同様の質問をしてすでに試していますが、以下のコードを参照してください)。むしろ、存在しないかどうかを確認したいだけです。同様に、存在しない場合は、、を呼び出し、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のエラーコンソールがそれをキャッチしてエラーを表示することに気付きました。たぶん私の条件文の構文が間違っていますか?

4

1 に答える 1

4

document.doctypeDoctypeが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>';
};
于 2012-12-15T23:43:23.993 に答える