Chrome のほぼすべてのバージョンで、ウェブ プラットフォームのパフォーマンスや機能に加え、多数の更新と改善が行われています。この記事では、9 月 15 日時点でベータ版の Chrome 54 でのサポート終了と削除について説明します。このリストは随時変更される可能性があります。
アンロード ハンドラでナビゲーションを無効にする
要約: Chrome を HTML 仕様に、Firefox と Safari も遵守させるため、window.onunload
イベント ハンドラでのクロスオリジン ナビゲーションはすべて禁止されます。
削除の目的 | Chromestatus Tracker | Chromium のバグ
以前のバージョンの Chrome では、window.onunload
内でクロスオリジン ナビゲーションを中断できました。window.location.href = '#fragment'
を設定します。HTML 仕様によると、アンロード ハンドラではページ内ナビゲーションのみが許可されており、以前のバージョンの Chrome では、仕様で要求されている他のナビゲーション方法がブロックされていました。Chrome 54 以降では、Firefox や Safari と同様に、そのようなナビゲーションは仕様に沿うことができなくなります。
HTTP/0.9 のサポート終了
要約: HTTP/0.9 のサポートが終了しました。デベロッパーは、新しいバージョン(HTTP/2 が望ましい)に移行する必要があります。
削除の目的 | Chromestatus Tracker | 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 Tracker | Chromium のバグ
デベロッパーは以前から、initTouchEvent
API を使用して Chrome で合成タッチイベントを作成することができました。これらは、サイトの UI をテストまたは自動化する目的で、タッチイベントのシミュレーションによく使用されます。Chrome 49 以降では、この非推奨の API に対して次のような警告が表示されます。
この変更が適切な理由は、タッチイベントの仕様に含まれていないこと以外にも、さまざまな理由があります。Chrome での initTouchEvent
の実装は Safari の initTouchEvent
API とまったく互換性がなく、Android の Firefox とは異なります。最後に、TouchEvent
コンストラクタの方がはるかに使いやすくなっています。
こうした理由から、仕様も互換性もない API を維持するのではなく、仕様に従うことにしました。代替機能を必要とするデベロッパーは、TouchEvent
コンストラクタを使用する必要があります。
iOS と Android/Chrome で initTouchEvent
API の実装方法が大きく異なるため、サイトは次のようなコードを備えていることがよくあります(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 は一致するようになり、このサポート終了となるため、これは好ましくありません。ただし、Android には他の WebKit ベースや古い Blink ベースのブラウザが当面存在するため、古い API をサポートする必要があることに変わりはありません。
ウェブ上で TouchEvent
を正しく処理するには、Firefox、IE Edge、Chrome をサポートするようにコードを変更する必要があります。そのためには、window
オブジェクトに TouchEvent
が存在することを確認し、正の「length」(引数を受け取るコンストラクタを示す)があればそれを使用する必要があります。
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 Tracker | 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 の終了イベントと属性、および onended 属性を削除します
要約: ended
イベントと属性、onended
イベント ハンドラは、メディア キャプチャとストリームの仕様から削除されたため、削除されます。
削除の目的 | Chromestatus Tracker | Chromium のバグ
ended
イベントも onended
イベント ハンドラも、この約 3 年間、WebRTC 仕様には含まれていません。イベントを視聴するデベロッパーは、MediaStreams
ではなく MediaStreamTracks
を使用する必要があります。
SVGSVGElement.viewPort のサポート終了
この実装は、2012 年以降 Chrome で機能していません。この属性は他のブラウザにはまったく存在しないため、仕様から削除されました。このため、このプロパティのサポートは終了となります。Chrome 55 で削除される予定です。
削除の目的 | Chromestatus Tracker | Chromium のバグ
SVGViewElement.viewTarget のサポート終了
SVGViewElement.viewTarget
属性は SVG2.0 仕様に含まれていないため、使用頻度は少ないか、まったくありません。この属性は Chrome 54 でサポートが終了しています。Chrome 56 で削除される予定です。
削除の目的 | Chromestatus Tracker | Chromium のバグ
SVGZoomEvent を削除する
SVGZoomEvent
は SVG2.0 仕様の一部ではなく、Chromium では機能しません。機能を検出できるにもかかわらず、デベロッパーが混乱する可能性があります。削除されます。