ほぼすべてのバージョンの Chrome で、プロダクト、パフォーマンス、ウェブ プラットフォームの機能に多数の更新と改善が加えられています。この記事では、9 月 15 日時点でベータ版の Chrome 54 での非推奨と削除について説明します。このリストは随時変更される可能性があります。
アンロード ハンドラでナビゲーションを無効にする
要約: Chrome を HTML 仕様、Firefox、Safari に準拠させるため、window.onunload イベント ハンドラですべてのクロスオリジン ナビゲーションが禁止されます。
削除の意図 | Chromestatus トラッカー | Chromium バグ
以前のバージョンの Chrome では、window.onunload 内でクロスオリジン ナビゲーションを中断することができました。window.location.href = '#fragment' を設定します。HTML 仕様によると、unload ハンドラで許可されるのはページ内ナビゲーションのみです。以前のバージョンの Chrome では、仕様で求められるとおり、他のナビゲーション メソッドはブロックされていました。Chrome 54 以降では、仕様と Firefox、Safari に準拠するため、このようなナビゲーションは許可されなくなります。
HTTP/0.9 の非推奨
要約: HTTP/0.9 は非推奨になりました。デベロッパーは、より新しいバージョン(できれば HTTP/2)に移行する必要があります。
削除の意図 | Chromestatus トラッカー | Chromium バグ
HTTP/0.9 は HTTP/1.x の前身です。後継機種の多くの機能が搭載されていません。最新のウェブで特に懸念されるのは、レスポンス ヘッダーがないことです。これらがないと、HTTP/0.9 レスポンスが実際に HTTP/0.9 レスポンスであることを確認できません。これにより、いくつかの問題が発生する可能性があります。たとえば、次のような問題があります。
- 特定のエラー レスポンスを有効な HTTP/0.9 レスポンスとして扱うクライアント。
- リクエスト ソケットを閉じることができず、クライアントがレスポンスをハングした GET として扱うサーバー。この GET は、永遠に存続するか、ユーザーがリクエストを行ったページから移動するまで存続します。
- リクエストが失敗したことをブラウザに通知できないサーバー。キャッシュ保存のヒューリスティックに問題が生じる可能性があります。
HTTP/0.9 の問題を解決する唯一の確実な方法は、サポートを完全に削除することです。そのため、Chrome 54 では HTTP/0.9 のサポートが削除されています。
initTouchEvent の使用を削除しました
要約:
initTouchEvent
は、仕様への準拠を改善するために TouchEvent
constructor に置き換えられ、Chrome 54 で完全に削除されます。
削除の意図 | Chromestatus トラッカー | Chromium バグ
デベロッパーは、initTouchEvent API を使用して、Chrome で合成タッチイベントを長らく作成してきました。これらは、サイトのテストや一部の UI の自動化のために、タッチイベントをシミュレートする目的でよく使用されます。Chrome 49 以降、この非推奨の API では次の警告が表示されています。
TouchEvent.initTouchEvent は非推奨となり、2016 年 9 月頃の M53 で削除されます。代わりに TouchEvent コンストラクタを使用してください。詳しくは、
https://www.chromestatus.com/features/5730982598541312 をご覧ください。Touch Events 仕様に含まれていない以外にも、この変更が望ましい理由はいくつかあります。Chrome の initTouchEvent の実装は、Safari の initTouchEvent API とはまったく互換性がなく、Android 版 Firefox とも異なっていました。最後に、TouchEvent コンストラクタが使いやすくなっています。
このような理由から、仕様に準拠することにしました。仕様に準拠せず、唯一の他の実装とも互換性のない API を維持することはしません。代替が必要なデベロッパーは、TouchEvent コンストラクタを使用する必要があります。
initTouchEvent API の iOS と Android/Chrome の実装は大きく異なっていたため、サイトでは 次のようなコードがよく使用されていました(Firefox を忘れることがよくありました)。
var event = document.createEvent('TouchEvent');
if(ua === 'Android') {
event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
300, 300, 200, 200, false, false, false, false);
} else {
event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
200, false, false, false, false, touches, targetTouches, changedTouches, 0, 0);
}
document.body.dispatchEvent(touchEvent);
これは、ユーザー エージェントで「Android」を探すため、Android 版 Chrome が一致してこの非推奨に該当してしまうため、好ましくありません。ただし、古い API をサポートする必要がある WebKit ベースや古い Blink ベースのブラウザが Android にしばらく残るため、まだ削除できません。
ウェブで TouchEvent を正しく処理するには、window オブジェクトで TouchEvent の存在を確認し、正の「length」がある(引数を取るコンストラクタであることを示す)場合はそれを使用することで、Firefox、IE Edge、Chrome をサポートするようにコードを変更する必要があります。
if('TouchEvent' in window && TouchEvent.length > 0) {
var touch = new Touch({
identifier: 42,
target: document.body,
clientX: 200,
clientY: 200,
screenX: 300,
screenY: 300,
pageX: 200,
pageY: 200,
radiusX: 5,
radiusY: 5
});
event = new TouchEvent("touchstart", {
cancelable: true,
bubbles: true,
touches: [touch],
targetTouches: [touch],
changedTouches: [touch]
});
}
else {
event = document.createEvent('TouchEvent');
if(ua === 'Android') {
event.initTouchEvent(touchItem, touchItem, touchItem, "touchstart", window,
300, 300, 200, 200, false, false, false, false);
} else {
event.initTouchEvent("touchstart", false, false, window, 0, 300, 300, 200,
200, false, false, false, false, touches, targetTouches,
changedTouches, 0, 0);
}
}
document.body.dispatchEvent(touchEvent);
KeyboardEvent.keyIdentifier 属性を削除
要約: ほとんどサポートされていない keyboardEvent.keyIdentifier プロパティが削除され、標準ベースの KeyboardEvent.key プロパティが採用されます。
削除の意図 | Chromestatus トラッカー | Chromium バグ
keyboardEvent.keyIdentifier 属性は、2009 年と 2010 年に W3C 仕様の一部として短期間存在していました。ただし、WebKit でのみ実装されました。
この属性を置き換える必要があるデベロッパーは、標準ベースの KeyboardEvent.key プロパティまたは KeyboardEvent.code プロパティ(昨年の春に公開した記事を参照)を使用できます。前者は、Safari を除くすべての主要なパソコン用ブラウザでサポートされており、最も幅広い実装ベースを備えています。後者は現在、Chrome、Firefox、Opera でサポートされています。この機能を削除することで、KeyboardEvent.key プロパティの採用を促進することを目的としています。Apple がこれをサポートするかどうかは不明ですが、非推奨(Chrome からはまだ削除されていない)の KeyboardEvent.keyCode プロパティと KeyboardEvent.charCode プロパティは Safari で引き続き使用できます。
MediaStream の ended イベント、属性、onended 属性を削除
要約: ended イベントと属性、および onended イベント ハンドラは、メディア キャプチャとストリームの仕様から削除されたため、削除されます。
削除の意図 | Chromestatus トラッカー | Chromium バグ
ended イベントも onended イベント ハンドラも、約 3 年間 WebRTC 仕様の一部ではありません。イベントを監視したいデベロッパーは、MediaStreams ではなく MediaStreamTracks を使用する必要があります。
SVGSVGElement.viewPort を非推奨に
この実装は 2012 年から Chrome で動作していません。この属性は他のブラウザにはまったく存在せず、仕様から削除されています。そのため、このプロパティは非推奨となります。Chrome 55 で削除される予定です。
削除の意図 | Chromestatus トラッカー | Chromium バグ
SVGViewElement.viewTarget を非推奨に
SVGViewElement.viewTarget 属性は SVG2.0 仕様の一部ではなく、使用頻度も低いか、まったく使用されていません。この属性は Chrome 54 で非推奨になりました。Chrome 56 で削除される予定です。
削除の意図 | Chromestatus トラッカー | Chromium バグ
SVGZoomEvent を削除
SVGZoomEvent は SVG2.0 仕様の一部ではなく、Chromium では機能しません。それでも機能は検出可能であるため、デベロッパーが混乱する可能性があります。削除されます。