HTML5プロフェッショナル認定試験レベル2 例題解説
例題解説とその内容については、例題提供者の監修です。内容や試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了承ください。
例題解説のご提供者さまを募集中です。LPI-Japan事務局までぜひご投稿ください。選ばれた方の例題解説は本サイトに掲載させていただきます。
2.2 WebブラウザにおけるJavaScript API
- 例題2.27「2.2.2 ドキュメントオブジェクト/DOM」
- レベル2の出題範囲「2.2.2 ドキュメントオブジェクト/DOM」からの出題です。
document.getElementsByClassName()とdocument.querySelector()の違いについて正しく説明しているものをすべて選択しなさい。 -
- document.getElementsByClassName()内にクラス名を記述することで、該当するDOM要素をすべて取得することができる。
- document.querySelector()では該当するDOM要素をすべて取得することができる。
- document.getElementsByClassName()は取得したときのDOM要素数を保持し、後から変化した場合でもDOM要素を自動的に更新して取得しない。
- document.querySelector()では半角スペースでクラス名を区切ることで、親子関係を考慮したDOM要素を取得することができる。
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2020年6月17日
答えはこちら
- 答え A、D
-
document.getElementsByClassName()やdocument.querySelectorAll()を使うことで、指定したクラス名に該当するDOM要素をすべて取得することが可能ですが、document.querySelector()では該当するDOM要素の最初のものだけ取得できます。そのためBは間違いです。
document.getElementsByClassName()は後からDOM要素が変化した場合、DOM要素を自動的に更新して取得します。document.querySelector()では、更新されません。
document.querySelector()では、クラス名を半角スペースで区切ることで、親子関係を考慮したDOM要素を取得できます。
例題解説の提供:株式会社クリーク・アンド・リバー社
関口 和真 氏
- 例題2.26「2.2.5 History API」
- レベル2の出題範囲「2.2.5 History API」からの出題です。
HistoryAPIにおいて、ブラウザーの「戻る」または「進む」やそれに類する操作が行われた際に検知するためのイベントとして正しいものはどれか? -
- state
- go
- popState
- pageState
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2020年6月3日
答えはこちら
- 答え C
-
Aはhistoryオブジェクトに存在するプロパティで現履歴情報を取得することができます。Bのgoはhisotoryオブジェクトに存在するメソッドで指定したページに移動させることができます。
Cはイベントでブラウザーの「戻る」、「進む」やそれに類する操作が発生した際に発火します。
Dは存在しないものです。
例題解説の提供:株式会社クリーク・アンド・リバー社
関口 和真 氏
- 例題2.25「2.2.1 イベント」
- レベル2の出題範囲「2.2.1 イベント」からの出題です。
スマートフォンにおけるタッチ関連のイベントで正しいものを選択しなさい。 -
- touchstartでタッチ開始を示す
- touchdragでタッチ中を示す
- touchesでタッチ開始を示す
- tapでタッチの開始と終了を示す
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2020年4月15日
答えはこちら
- 答え A
-
スマートフォンに代表されるタッチパネルが搭載されているマシンでは、タッチ関連のイベントが使うことができます。clickイベントなどもタッチイベントの代わりとして使うことができますが、専用のイベントがあります。
touchstartでタッチ開始を示します。あくまでも開始を示すため、指を離したことは、touchendイベントを利用して検出します。touchdragは存在しません。タッチ中を示すのは、touchmoveイベントです。touchesはすべてのタッチの情報が格納されるプロパティ名です。tapはイベント名としてありそうですが、JavaScriptのイベントとしては存在しません。通常は、touchstartとtouchendを組み合わせてtapイベントとして作成するのが一般的です。
例題解説の提供:株式会社クリーク・アンド・リバー社
関口 和真 氏
- 例題2.24「2.2.3 ウィンドウオブジェクト」
- レベル2の出題範囲「2.2.3 ウィンドウオブジェクト」からの出題です。
setIntervalについて正しいものをすべて選択しなさい。 -
- 指定したミリ秒後に指定した関数を1度だけ実行する
- 指定したミリ秒ごとに指定した関数を実行する
- 1度開始したらブラウザーが閉じるまで関数を実行し続ける
- 処理が完了しない場合でも、指定したミリ秒が経過すると関数が実行されることがある
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2020年3月19日
答えはこちら
- 答え B、D
-
AはsetTimeoutの説明です。setIntervalは指定したミリ秒ごとに指定した関数を実行します。
clearIntervalを利用することで、任意のタイミングでsetIntervalの実行を止めることができます。そのため、Cは間違いです。
setIntervalでは指定した秒数ごとに関数が実行されますが、仮に関数が終了していなくても指定した秒数が経過したら関数が実行されるため、多重に関数が実行されることがあります。
例題解説の提供:株式会社クリーク・アンド・リバー社
関口 和真 氏
- 例題2.22「2.2.2 ドキュメントオブジェクト/DOM」
- レベル2の出題範囲「2.2.2 ドキュメントオブジェクト/DOM」からの出題です。
HTML要素に任意のclass「text」を付与したい。要望をかなえることのできるJavaScriptのコードとして正しいものはどれか? -
- let dom = document.querySelector(‘p’);
dom.classList.add(‘text’); - let dom = document.querySelectorAll(‘p’).classList.add(‘text’);
- document.querySelector(‘p’).addClass(‘text’);
- let dom = document.querySelectorAll(‘p’);
dom.hasClass.addClass(‘text’);
- let dom = document.querySelector(‘p’);
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2020年1月8日
答えはこちら
- 答え A
-
querySelectorでDOMを指定した場合、classを付与するには、classList.addを利用して付与します。querySelectorであれば、該当するDOM要素の最初のものだけ取得してきますが、querySelectorAllの場合は該当するDOM要素をすべて取得してくるため、classListを使う際には、ループなどで展開しつつ適用する必要があるため、Bはエラーとなります。Dも同様にループで展開させる必要があるため、この書き方ではエラーとなります。
addClassメソッドはjQueryに存在するメソッドでJavaScriptでは利用できません。
例題解説の提供:株式会社クリーク・アンド・リバー社
関口 和真 氏
- 例題2.21「2.2.4 Selectors API」
- レベル2の出題範囲「2.2.4 Selectors API」からの出題です。
以下のHTMLから、要素Aと書かれたli要素を取得するスクリプトとして、適切なものを全て選択しなさい。 -
- document.getElementById('articleA');
- document.querySelector('#articleA');
- document.querySelector('.list .list__item:first-child');
- document.querySelector('.article .list__item:first-of-type');
<div class="article">
<div class="article__title"></div>
<ul class="article__list list">
<li class="list__item" id="articleA">要素A</li>
<li class="list__item" id="articleB">要素B</li>
<li class="list__item" id="articleC">要素C</li>
</ul>
</div>
<div class="ad">
<div class="ad__title"></div>
<ul class="ad__list list">
<li class="list__item" id="adD">要素D</li>
<li class="list__item" id="adE">要素E</li>
<li class="list__item" id="adF">要素F</li>
</ul>
</div>
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2019年8月8日
答えはこちら
- 答え A、B、C、D
-
Aで用いたgetElementById()は、IDの値をキーとして要素を取得します。よってIDの値が"articleA"である要素Aを取得できます。
B, C, Dで用いたquerySelector()は、CSSのセレクタを用いて、最初に該当した要素を取得します。
Bでは、IDセレクタである"#"を用いているため、IDの値が"articleA"である要素Aを取得できます。
Cでは、クラスセレクタである"."を用いています。クラス"list"を持つ要素の配下で、"list__item"クラスを持ち、かつ最初の要素が":first-child"擬似クラスによって選択されます。このセレクタに該当するのは要素Aと要素Dですが、querySelector()は最初に該当する要素のみを取得するので、要素Aを取得できます。
Dでも同様にクラスセレクタを用いています。クラス"article"を持つ要素の配下で、"list__item"クラスを持つ最初の要素が":first-of-type"擬似クラスによって選択されます。このセレクタに該当するのは要素Aなので、要素Aを取得することができます。
例題解説の提供:HTML5アカデミック認定校 NTTテクノクロス株式会社
HTML5レベル2認定者 鈴木 雅貴 氏
- 例題2.20「2.2.2 ドキュメントオブジェクト/DOM」
- レベル2の出題範囲「2.2.2 ドキュメントオブジェクト/DOM」からの出題です。
以下のスクリプトを実行した後で、"btn"クラスがついたボタンをクリックすると、そのボタンへ新たに"btn--clicked"クラスを追加するようにしたい。以下の(1)に入るものとして適切なものを選びなさい。 -
- btn.addClass('btn--clicked');
- btn.setAttribute('class', 'btn--clicked');
- btn.className = 'btn--clicked';
- btn.classList.add('btn--clicked');
var btn = document.querySelector('.btn');
btn.addEventListener('click', function(){
(1)
});
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2019年6月17日
答えはこちら
- 答え D
-
HTML要素にクラスを追加するには、classListプロパティのaddメソッドを使用します。よって、Dが正解です。
Aは存在しないメソッドです。
B, Cはクラスに"btn--clicked"を指定できますが、既存のクラスを上書きしてしまうため、"btn"クラスがなくなってしまいます。よって、追加としては適切ではありません。
className等を用いてクラス追加を実現したい場合は、既存のクラスも指定するために、以下のようにする必要があります。
btn.className = btn.className + ' btn--clicked';
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.19「2.2.2 ドキュメントオブジェクト/DOM」
- レベル2の出題範囲「2.2.2 ドキュメントオブジェクト/DOM」からの出題です。
以下のHTML要素に、width属性を追加したい。正しくない記述を選択しなさい。 -
- document.getElementById('pic').setAttribute('width',100);
- var attr = document.createAttribute('width');
attr.value = 100;
document.getElementById('pic').setAttributeNode(attr); - document.getElementById('pic').addAttribute('width',100);
- document.getElementById('pic').setAttribute('width','100');
<img id="pic" src="image.png">
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2019年3月5日
答えはこちら
- 答え C
-
addAttribute()というメソッドは存在しません。
属性を追加するには以下の方法があります。
・setAttribute()メソッドを使用する (A,D)
・createAttribute()メソッドを使用して生成したオブジェクトをsetAttributeNode()メソッドで追加する (B)
AとDの違いは属性の値を数値として渡すか文字列として渡すかの違いです。
単純な数値の場合はどちらの記述でも問題ありません。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.18「2.2.2 ドキュメントオブジェクト/DOM」
- レベル2の出題範囲「2.2.2 ドキュメントオブジェクト/DOM」からの出題です。
HTML要素のオブジェクトから指定した属性を削除するメソッドを選択しなさい。 -
- removeAttribute()
- deleteAttribute()
- spliceAttribute()
- reduceAttribute()
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2018年11月6日
答えはこちら
- 答え A
-
HTML要素から属性を削除するためには、 removeAttribute()メソッドを使用します。
element.removeAttribute('属性名');
その他の選択肢は存在しないメソッドです。
class属性もremoveAttribute()メソッドで削除できますが、removeAttribute()メソッドでは複数あるクラス名のうち1つだけを削除することはできず、全てを削除することしかできません。
特定のクラス名だけを削除したい場合には、classListプロパティを使用して以下のように記述します。
element.classList.remove('クラス名');
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.17「2.2.1 イベント」
- レベル2の出題範囲「2.2.1 イベント」からの出題です。
以下のスクリプトを実行した後で、customEventイベントを発生させるにはどのようにすれば良いか。正しい選択肢を選びなさい。 -
- btn.click();
- btn.dispatchEvent(new Event('customEvent'));
- ボタンをクリックする。
- btn.dispatchEvent('customEvent');
var btn = document.getElementById('btn');
btn.addEventListener('customEvent',function(){
alert('customEvent');
});
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2018年9月20日
答えはこちら
- 答え B
-
カスタムイベントの登録と呼び出しに関する問題です。
カスタムイベントとは、ブラウザ上のJavaScriptに最初から用意されているイベントでは無く、プログラム作成者が独自に設定できるイベントのことです。
カスタムイベントの登録方法は組込みイベントと同じく、addEventListenerで行なうことができます。
このとき、組込みイベント名以外の名称を文字列で与えます(問題では'customEvent')。
カスタムイベントは、ボタンのクリックなどでは発生しません。
イベントを呼び出すには、イベントを登録した要素に対してdispatchEvent()メソッドを実行します。
dispatchEventには、引数としてEventオブジェクトを渡します。
イベント名を文字列で渡すだけではエラーになるので注意が必要です。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.16「2.2.3 ウィンドウオブジェクト」
- レベル2の出題範囲「2.2.3 ウィンドウオブジェクト」からの出題です。
メッセージと共に「OK」、「キャンセル」のボタンを表示し、ユーザがどちらを選択したか取得したい。使用するメソッドはどれか正しいものを選択しなさい。 -
- prompt
- alert
- submit
- confirm
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2018年7月31日
答えはこちら
- 答え D
-
ウインドウオブジェクトにはダイアログを表示するメソッドが、3種類あります。
confirm、alert、prompt です。
confirmメソッドは以下のように使用します。ボタンは「OK」と「キャンセル」が表示されます。
alertメソッドは以下のように使用します。(windowは省略することができます)
var result = window.confirm('メッセージ');
confirmメソッドの結果は、「OK」が押されたらtrue、「キャンセル」が押されたらfalseになります。
その他の選択肢については以下の通りです。選択肢A
promptは、ユーザーのテキスト入力を受け付けます。ボタンは「OK」と「キャンセル」が表示されます。
promptメソッドは以下のように使用します。(windowは省略することができます)
var result = window.prompt('メッセージ','デフォルト値(省略可)');
confirmメソッドの結果は、テキストを入力した上で「OK」が押されたら入力された文字列、「キャンセル」が押されたらnullになります。
入力欄が空のまま「OK」を押した場合には空文字列になります。選択肢B
alertはメッセージをダイアログ表示する際に使用されます。ボタンは「OK」のひとつだけです。
alertメソッドは以下のように使用します。(windowは省略することができます)
window.alert('メッセージ');選択肢C
windownオブジェクトにはsubmitというメソッドはありません。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.15「2.2.2 ドキュメントオブジェクト/DOM」
- レベル2の出題範囲「2.2.2 ドキュメントオブジェクト/DOM」からの出題です。
以下のHTMLに対してスクリプトを実行した際に、変数resultの値として正しいものを選択しなさい。 -
- true
- false
- "img.jpg"
- "src"
【HTML】
<img id="im" src="img.jpg">
【script】
var result = document.getElementById("im").hasAttribute("src");
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2018年7月3日
答えはこちら
- 答え A
- hasAttributeメソッドは対象のHTML要素に、指定した名称の属性があるか調べるメソッドです。
結果はtrueまたはfalseになります。
問題のimg要素にはsrc属性が存在するため、結果はtrueになります。
属性の有無のみを判別するため、値については問われません。
例えば、問題のHTMLが以下のようにsrc属性が空文字列でも、結果はtrueになります。
<img id="im" src="">
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.14「2.2.1 イベント」
- レベル2の出題範囲「2.2.1 イベント」からの出題です。
下記のフォームを使用してユーザーが送信した際に入力の不備で送信に失敗したらスクリプトを実行したい。
イベントハンドラを設定するのに最も適切な要素とイベント名の組み合わせを選択しなさい。 -
- form要素のonerrorイベント
- input type="text"要素のoninvalidイベント
- input type="submit"要素のonsenderrorイベント
- form要素のoninvalidイベント
<form id="form" method="post" action="contact.php">
<input id="mesg" name="message" type="text" required>
<input id="submit" type="submit" value="送信">
</form>
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
例題公開日:2018年6月19日
答えはこちら
- 答え B
- HTML5で、フォームの入力項目に様々な制約を付けられるようになりました。
必須項目を表わすrequired属性や、入力される文字列のパターンを指定することができるpattern属性です。
また、type属性でも"email"や"tel"などを指定することで入力値をあるパターンに制限できるようになっています。
ユーザが入力した値がこれらの制限に抵触した場合には、Webブラウザはフォームの送信を中断します。
その際に、Webブラウザは該当する入力項目にoninvalidイベントを発生させます。
問題のフォームでは、制限が掛っている項目はひとつだけですので、input type="text"の要素でイベントが発生します。
複数の項目で制限を掛けている場合は、各項目にイベントハンドラを設定する必要があります。
form要素でまとめて処理することはできません。
Safariではoninvalidイベントを実装していませんし、required属性などに対応していないバージョンもあるので注意が必要です。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.13「2.2.6 テスト・デバッグ」
- レベル2の出題範囲「2.2.6 テスト・デバッグ」からの出題です。
JavaScript プロファイラに関する記述として正しいものをすべて選びなさい。 -
- 記録中のプロファイル名に一致する名称を Console.profileEnd() に渡すと、そのプロファイルを終了します。
- 記録中のプロファイル名に一致しない名称を Console.profileEnd() に渡すと、直近に開始したプロファイルを終了します。
- Console.profileStart() を呼び出すとパフォーマンスプロファイルの記録を開始します。
- Console.profileEnd() を呼び出すと、記録を終了します。
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え A、D
- テスト・デバッグに使用するConsoleオブジェクトを使用してJavaScriptプロファイルを収集する方法に関する問題です。
Bは記録中のプロファイル名に一致しない名称を Console.profileEnd() に渡すと、何も行いません。直近に開始したプロファイルを終了するのは、Console.profileEnd() にプロファイル名を渡さない場合です。もちろん、Aのように一致する名称を渡してもプロファイルを終了します。CはConsole.profile()が正しいです。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 伊藤 眞 氏
- 例題2.12「2.2.4 Selectors API」
- レベル2の出題範囲「2.2.4 Selectors API」からの出題です。
以下のコードを実行した結果として正しいものを選びなさい。 -
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <div> <p class="currencymark"> 200</p> <p class="currencymark"> 200</p> <p class="currencymark"> 200</p> </div> <style> p::before{ content: "JPY"; font-size: 1.0em } </style> <script> var price = document.querySelector('p.::before'); for(var i=0;i<price.length;i++){ price[i].innerHTML="USD"; } </script> </body> </html>
-
- USD 200
JPY 200
JPY 200 - USD 200
USD 200
USD 200 - JPY 200
JPY 200
JPY 200 - 何も表示されない
- USD 200
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え C
- querySelector() とquerySlectorAll() を使用してCSSセレクタを使用してDOMの要素を選択できます。CSSセレクタには擬似要素がありますがJavaScript のSelector APIでは擬似要素は選択できません。したがってpriceには何も返されずfor文は実行されません、したがって200に疑似要素::beforeで定義されたJPYが付加された元のコードのままで表示されます。
またquerySelector()は指定されたセレクタに合致する最初の要素を返すため、このコードでセレクタを”.currencymark”と変えてもprice変数にはp要素が入りますので、for 文が実行されず同じ結果になります。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 伊藤 眞 氏
- 例題2.11「2.2.5 History API」
- レベル2の出題範囲「2.2.5 History API」からの出題です。
ブラウザの履歴から現在のドキュメントを取り除き、新しいドキュメントを表示したい。以下のLocationのメソッドのうち最も適切なものを選びなさい。 -
- assign()
- reload()
- replace()
- push()
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え C
- Locationオブジェクトを使って指定したページをロードすることに関する問題です。
A.のassign()も指定したドキュメントを表示させることができますが履歴が削除されませんので、ブラウザの戻るボタンを押されると元のドキュメントに戻りまた同じスクリプトを実行され、新しいドキュメントが再度表示されてしまいます。
reload()は現在のページをリロードするだけです。Locationオブジェクトにpush()というメソッドはありません。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 伊藤 眞 氏
- 例題2.10「2.2.1 イベント」
- レベル2の出題範囲「2.2.1 イベント」からの出題です。
以下のコードで Yellowという文字をマウスでクリックした場合表示がどのようになるか正しいものを選びなさい。 -
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script> window.onload = function() { document.getElementById('A').addEventListener('click',function() { text=document.getElementById('A') text.innerHTML= "Blue is Clicked</p>"; },false) document.getElementById('B').addEventListener('click',function() { text=document.getElementById('B') text.innerHTML= "Green is Clicked"; },false) document.getElementById('C').addEventListener('click',function() { text=document.getElementById('C') text.innerHTML= "Red is Clicked"; },false) document.getElementById('D').addEventListener('click',function() { text=document.getElementById('D') text.innerHTML= "Yellow is Clicked"; },false) } </script> </head> <body> <div id ='A'> Blue <div id = 'B'> Green </div> <div id = 'C'> Red </div> </div> <div id = 'D'> Yellow </div> </body> </html>
-
- Blue
Green
Red
Yellow - Blue
Green
Red
Yellow is Clicked - Blue is Clicked
Green is Clicked
Red is Clicked
Yellow is Clicked - Blue is Clicked
Yellow
- Blue
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え B
- これはイベントリスナーの登録の基本的な例です。addEventListener の引数のclickがマウスクリックのイベントを示します。
この例ではYellowのdiv要素はトップレベルになりますので他には影響が出ずB が正解になります。
GreenとRedのdiv要素はBlueの子要素になっているため、GreenやRedを押した場合、親要素のBlueにイベントが伝搬し、D のようになります。また、Blueを押した場合にも、Blueのdiv要素を書き替えますのでD になります。 A はイベントが起きていない状態の表示です。div要素を全て並列(全てを同じレベル)にして全てクリックするとC のような結果になります。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 伊藤 眞 氏
- 例題2.9「2.2.5 History API」
- レベル2の出題範囲「2.2.5 History API」からの出題です。
History APIのpushStateメソッドを使用して、存在しないWebページのURLをスタックに追加した場合の結果を選択しなさい。 -
- JavaScriptのエラーになり、404 Not Foundと表示される
- JavaScriptのエラーになるが、現在のページが表示されたままになる
- アドレスバーに指定したURLが表示され、404 Not Foundというページが表示される
- 何も変化しない
- アドレスバーに指定したURLが表示され、現在のページが表示されたままになる
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え E
- History APIはWebブラウザの"戻る"、"進む"といったボタンのような機能をJavaScriptから操作する方法です。
ページ移動の履歴はスタックという形で保存されます。
スタックは荷物を積み上げるイメージに近く、後から追加したものは前の荷物の上に置き、取り出すときには一番上の荷物から取り除くことになります。
指定したURLの有無に関わらず、pushStateメソッドの結果は、アドレスバーに指定したURLが表示され現在のページが表示されたままになります。
Ajaxのような非同期通信による内容の書き換えを行なう場合に、そのままではURLが変化しないため、ブックマークや、メール等でURLを教える場合などに内容を維持できません。
そこで、内容の変化に伴なってURLを変化させることで、ページ全体のリロードを行なうことなくURLと内容を一致させることができます。
このような技術をpjaxと呼びます。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.8「2.2.5 History API」
- レベル2の出題範囲「2.2.5 History API」からの出題です。
現在の画面から、ブラウザの戻るボタンや履歴によるフォーム入力画面への遷移を無効にしたい。
有効な手段を全て選択しなさい。
ただし、画面遷移はA(前の画面)→B(フォーム入力画面)→C(現在の画面)となっていることとし、prevurlにはA(前の画面)のURL、nexturlにはC(現在の画面)のURLが格納されているものとする。- 現在の画面でhistory.pushState()を用いてダミーの履歴を作成し、onpopstateイベントハンドラを用いてダミーの履歴に戻るようにする。
- フォーム入力画面をロードする時に window.history.forward() が実行される様にする。
- フォーム入力画面から遷移する時に window.history.replaceState(prevurl) が実行される様にする。
- フォーム入力画面から遷移する時に window.location.replace(nexturl); を利用する。
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え B, C, D
- history.pushState()とonpopstateイベントハンドラを駆使して、現在の画面からの戻るボタンを抑止する方法は、戻るボタンの単発のクリックには有効ですが、履歴から辿れてしまいます。
- フォーム入力画面のロード時に必ずhistory.forword()を実行するようにすれば、入力後の画面に遷移した後にフォーム入力画面に戻ろうとした時には、必ずキャッシュを使った現在の画面表示に強制的に進められます。
ただし、キャッシュとはいえフォーム入力画面に戻っており、history.forward()を呼び出す以前のJavaScriptがあれば、実行されてしまうので注意が必要です。 - history.replaceState(prevurl)は、フォーム入力画面で自分の履歴を前の画面のURLで書き換えているため、現在の画面から戻るボタンや履歴で戻る場合には、前の画面に戻ることになります。
- location.replace(nexturl)は、現在の履歴を消去した上でnexturlに遷移する、という動作のため、データ送信は別途AJAXなどで行い、データ送信が完了してからこれを呼び出す必要があります。
- location.replace()やhistory.replaceState()を使った手法は、フォーム入力画面の履歴が残らないため、履歴から戻れることはなくなり、history.forwrd()より安全と言えます。
例題解説の提供:
LPI-Japanプラチナスポンサー NECソリューションイノベータ株式会社
武藤 周 氏
- 例題2.7 「2.2.6 テスト・デバッグ」
- レベル2の出題範囲「2.2.6 テスト・デバッグ」からの出題です。
JavaScriptで、コンソールに指定したDOMオブジェクトをXML/HTMLで表示するメソッドを選択しなさい。 -
- Console.log();
- Console.dir();
- Console.dirxml();
- Console.element();
- Console.dump();
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 正解 C
-
2.2.5 テスト・デバッグに関する出題です。
Console.dirxmlメソッドは、引数に指定されたDOMオブジェクトを、XML/HTMLの書式 で開発者ツールのコンソールに表示します。
JavaScriptのオブジェクトを引数にすると、Chromeではオブジェクトリテラルとして 表示されます。
D,Eの選択肢のメソッドは存在しません。
Console.dirとConsole.dirxmlメソッドはブラウザによって実装状況が異なります。
実際に動作を試す場合には、Chromeを使用すると良いでしょう。
dirxmlはIE(11),Firefox(49.0)、Safari(10.0)ではConsole.logと同じ表示になりま す。
dirはIE(11),Firefox(49.0)では、オブジェクトをツリー形式で表示します。
Safari(10.0)では、Console.logと同じ表示になります。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.6 「2.2.4 Selectors API」
- レベル2の出題範囲「2.2.4 Selectors API」からの出題です。
以下のHTMLにおける、スクリプトの実行結果を選択しなさい。 -
<div id="elm"> <p<HTML5</p> </div> document.querySelector('#elm a');
-
- エラーが発生する
- { }
- undefined
- null
- [ ]
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 正解 D
-
2.2.4 Selectors APIに関する出題です。
querySelectorメソッドで、該当する要素の存在しないセレクタを指定した場合の結果はnullになります。
セレクタの記述が不正な書式の場合はエラーになり、例外SYNTAX_ERRが発生します。
querySelectorに似たメソッドにquerySelectorAllがありますが、このメソッドで該当要素の存在しないセレクタを指定した場合は空配列が返ります。
HTML要素を操作するスクリプトが思ったように動作しない場合は、各Webブラウザに搭載されている開発者ツールのデバッガを使って、メソッドの結果を確認したり、コンソールにエラーが出ていないか確認してみると良いでしょう。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.5 「2.2.4 Selectors API」
- レベル2の出題範囲「2.2.4 Selectors API」からの出題です。
以下のHTML中の "ul要素内のli要素" 全てを選択するためのスクリプトを選択しなさい。 -
<ol> <li>ABC</li> <li>DEF</li> </ol> <ul> <li>GHI</li> <li>JKL</li> </ul>
-
- document.getElementsByTagName('li');
- document.getElementsByQuery('ul li');
- document.querySelector('ul li');
- document.querySelectorAll('ul li');
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 正解 D
-
2.2.4 Selectors APIに関する出題です。
HTML5では、HTML要素のDOMオブジェクトの取得を行なうメソッドとして、これまでのgetElementByIdや、getElementsByTagNameに加え、querySelectorとquerySelectorAllが追加されました。
querySelectorやquerySelectorAllでは、CSSセレクタと同様の記述でHTML要素のDOMオブジェクトを取得することができます。
querySelectorは、セレクタに該当するDOMオブジェクトの最初の要素(該当するものがなければnull)を取得できます。
querySelectorAllは、セレクタに該当するDOMオブジェクトを全て取得できます。
A. の結果は、olとul内のli要素を全て取得してしまうため間違いです。
B. のメソッドは存在しません。
C. の結果は、ul liに該当する最初の要素(<li>GHI</li>)だけを選択されます。
元々、jQueryのメリットとして挙げられることの多かったCSSセレクタと同様の要素 取得機能ですが、HTML5ではJavaScriptにその機能が取り込まれたかたちになりま す。 同様にアニメーションもCSS3で実現できるようになったため、時代の流れとして jQueryを導入しない選択肢も考えられるようになってきました。
例題解説の提供:株式会社クリーク・アンド・リバー社
HTML5レベル2認定者 高井 歩 氏
- 例題2.4 「2.2.3 ウィンドウオブジェクト」
- レベル2の出題範囲「2.2.3 ウィンドウオブジェクト」からの出題です。
クロスドメインで呼び出したウィンドウとメッセージをやりとりしたい。
セキュリティ上、有効な実装を全て選択しなさい。 -
- 呼び出し元からのpostMessageメソッド呼び出しにおいて、呼び出し先のドキュメントを一つに特定するために、第二引数にURLをパスまで指定する。
- 呼び出されたウィンドウにおいて、呼び出し元をチェックするために、messageイベントハンドラの引数のoriginプロパティを利用する。
- 呼び出されたウィンドウにおいて、呼び出し元をチェックするために、messageイベントハンドラの引数のsourceプロパティを利用する。
- やりとりするメッセージの中において、互いに信頼できる情報を含める。
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 正解 B, D
-
呼び出し元のpostMessageメソッドでは、URLをパスまで指定できますが、スキーマ、ホスト、ポートまでしかチェックされず、URLを一つに特定することはできません。
しかしながら、サイトのチェックのために、スキーマ、ホスト、ポートの指定はすべきです。呼び出されたウィンドウのmessageイベントハンドラで受け取れる引数には、data、source、originの3つのプロパティがありますが、呼び出し元の情報が必ず含まれるのは、originです。
このoriginプロパティで確認できるのは、スキーマ、ホスト、ポートまでで、パスは含まれないことに注意が必要です。また、やりとりするメッセージの中に互いに信頼できる情報を含めるのも有効です。
呼び出し元がファイルシステム(スキーマがfile)やブラウザの拡張などで、originプロパティが利用できない場合には、別途信頼できる情報をやりとりすべきです。
例題解説の提供:
LPI-Japanプラチナスポンサー
NECソリューションイノベータ株式会社
武藤 周 氏
- 例題2.3 「2.2.2 ドキュメントオブジェクト/DOM」
-
レベル2の出題範囲「2.2.2 ドキュメントオブジェクト/DOM」からの出題です。
下記の記述にあるinput要素を変更してユーザによる値の変更を抑制したい。
<input class="test" type="text" value="test">
変更後の結果として、レイアウトや機能に影響を与えずに実現可能しているものを全て選択しなさい。
-
A. <input class="test" type="text" value="test" style="display:none"> <div class="test">test</div> B. <input class="test" type="text" value="test" style="visibility:hidden"> <div class="test">test</div> C. <input class="test" type="text" value="test" disabled="disabled"> D. <input class="test" type="hidden" value="test"> <div class="test">test</div>
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 正解 A, D
-
「style="display:none"」の追加と「type="hidden"」への変更は、要素の描画領域が確保されず、全く表示されなくなるため、代わりに値を表示するdiv要素を追加し、レイアウトを崩さずに実現しています。
「style="visibility:hidden"」の追加は、要素の描画領域を確保したまま不可視にするため、レイアウトを崩してしまいます。
「disabled="disabled"」の追加は、フォームをサーバに送信するときに、送信対象から外れてしまい、機能的に影響が出てしまいます。
例題解説の提供:
LPI-Japanプラチナスポンサー
NECソリューションイノベータ株式会社
武藤 周 氏
- 例題2.2「2.2.6 テスト・デバッグ」
- レベル2の出題範囲「2.2.6 テスト・デバッグ」からの出題です。
DOMオブジェクトを引数とした時に、オブジェクトのプロパティを表示するconsoleオブジェクトのメソッドを一つ選びなさい。 -
- dir
- log
- dirxml
- profile
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え A
-
DOMオブジェクトのプロパティを表示するのは、dirメソッドです。
dirxmlやlogは、DOMオブジェクトであれば、DOMツリーとして表示します。profileは、profile("識別子")からprofileEnd("識別子")までの処理にかかった時間を開発者ツールのProfilesタブ(Chromeの場合)やパフォオーマンスタブ(Firefoxの場合)に表示します。
consoleオブジェクトには、logメソッドだけでなく、デバッグに便利なメソッドが他にもあります。
log以外に、error、warn、info、trace、assertなどのお馴染みのキーワードのメソッド、group("識別子")からgroupEnd("識別子")までのログ出力をグループ化するメソッド、time("識別子")からtimeEnd("識別子")までの経過時間を表示するメソッド、オブジェクトをツリー形式でなく表形式で表示するtableメソッドもあります。
例題解説の提供:
LPI-Japanプラチナスポンサー NECソリューションイノベータ株式会社
武藤 周 氏
- 例題2.1「2.2.1 イベント」
- レベル2の出題範囲「2.2.1 イベント」からの出題です。
以下のイベントハンドラのうち、documentオブジェクトでサポートされているものを全て選択しなさい。 -
- onload
- onunload
- onbeforeunload
- onloadstart
※この例題は実際のHTML5プロフェッショナル認定試験とは異なります。
答えはこちら
- 答え A,D
-
onunloadとonbeforeunloadは、windowオブジェクトでサポートされているイベントハンドラであり、windowオブジェクトに含まれるdocumentオブジェクトではサポートされません。
onloadは、body要素やframeset要素でサポートされているイベントハンドラであり、documentオブジェクトやwindowオブジェクトでキャッチできます。
onloadstartは、メディア関連のaudioやvideo、img要素でサポートされているイベントハンドラであり、これらの要素を含むdocumentオブジェクトにもイベントは伝播します。
例題解説の提供:
LPI-Japanプラチナスポンサー NECソリューションイノベータ株式会社
武藤 周 氏
メルマガ登録E-mail Magazine
受験を決めたら、まずメルマガ登録。
学習に役立つ例題解説付きメールマガジンを定期発行