function isUnknownElement(tag){
var el = document.createElement(tag);
if (tag.indexOf('-') > -1) {
return (
el.constructor === window.HTMLUnknownElement ||
el.constructor === window.HTMLElement
);
} else {
return /HTMLUnknownElement/.test(el.toString());
}
}
解説
HTML5から導入されたHTMLUnknownElementを利用してJavaScript上で判定しています。
ハイフンがある場合はカスタムエレメントの関係上、処理を多少変える必要があります。
雑記
普段の開発で使うことがあまりないためか、調べても見つからなかったので投稿しておきます。
自分は、picture要素が含まれるVue.jsを利用したページに対して、picture要素をサポートしていないブラウザでアクセスした場合に、エラーになってしまうのを回避するために用いました。
エラーの内容から、そもそもVue.js側で判定を行っているはずなので、その実装を大いに参考にしました。
(ちなみにVue.js側のバグは既に解決済みですが、まだ反映待ちです。
https://github.com/vuejs/vue/pull/5675)