ページが読み込まれるまで待つ必要があります。あなたは何かを求めています:
document.getItems('http://schema.org/Person')[0]
これはまだ DOM の一部ではありません。コードは、DOM が「まだ見えていない」要素を認識する前に実行されます。
window.onload
要素が解析された後に発生するページonload
イベントが発生するのを待機するために使用します。
window.onload = function(){
var user = document.getItems('http://schema.org/Person')[0];
console.log(user);
console.log('user.properties Name: ' + user.properties['name'][0].textContent);
function supports_microdata_api() {
return !!document.getItems;
}
console.log(supports_microdata_api());
};
http://jsfiddle.net/eY63s/2/
または、DOM 要素の後にコードをページ順に配置します。
より現代的な方法は、イベント委任を使用することです。
window.addEventListener('load', function(){
var user = document.getItems('http://schema.org/Person')[0];
console.log(user);
console.log('user.properties Name: ' + user.properties['name'][0].textContent);
function supports_microdata_api() {
return !!document.getItems;
}
console.log(supports_microdata_api());
});
http://jsfiddle.net/eY63s/3/
少なくとも以前のバージョンの IE はelement.attachEvent
代わりにサポートしていますが、IE9 以降のブラウザはelement.addEventListener
.
そして、これはメソッドをチェックして呼び出すためのより安全な方法です:
window.addEventListener('load', function(){
var user;
function supports_microdata_api() {
return !!document.getItems;
}
console.log('Microdata support: ' + supports_microdata_api());
if (supports_microdata_api()) {
user = document.getItems('http://schema.org/Person')[0];
console.log(user);
console.log('user.properties Name: ' + user.properties['name'][0].textContent);
}
});
http://jsfiddle.net/eY63s/4/
var user
無名関数内で を使用していることに注意してください。これにより、クロージャが作成user
され、グローバル スコープへのエスケープが防止されます。これは、変数を処理する "より良い" 方法であり、グローバルな共有によって変数が誤って上書きされるのを防ぐのに役立ちます。一方、user
そのスコープ外から呼び出すことはできません。ただし、それをグローバルスコープにプッシュしたいという衝動に抵抗してください。これは簡単ですが、悪い習慣であり、エラーを見つけるのが難しい場合があります。