API のサポート終了と削除(Chrome 50)

ほぼすべてのバージョンの Chrome で、プロダクト、そのパフォーマンス、ウェブ プラットフォームの機能に多くの更新と改善が加えられています。

Chrome 50(ベータ版の予定日: 3 月 10 ~ 17 日)では、Chrome にいくつかの変更が加えられています。このリストは随時変更される可能性があります。

安全でないコンテキストでの AppCache のサポート終了

要約: クロスサイト スクリプティングを防止するため、安全でないオリジンでの AppCache のサポートを終了します。Chrome 52 では、HTTPS 経由でコンテンツを配信するオリジンでのみ機能することが想定されています。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

AppCache は、オフラインでも常にオリジンにアクセスできるようにする機能です。これは、クロスサイト スクリプティング攻撃の強力な権限昇格です。安全でないオリジンの強力な機能を削除するという大規模な取り組みの一環として。

Chrome では、HTTPS 経由でのみ許可することで、この攻撃ベクトルを削除しています。HTTP サポートは Chrome 50 で非推奨になり、Chrome 52 で完全に削除される予定です。

Document.defaultCharset を削除

要約: document.defaultCharset は、仕様への準拠性を高めるために削除されました。

削除の意向 | Chromestatus トラッカー | CRBug の問題

Chrome 49 で非推奨となった document.defaultCharset は、地域の設定に基づいてユーザーのシステムのデフォルトの文字エンコードを返す読み取り専用のプロパティです。ブラウザが HTTP レスポンスまたはページに埋め込まれたメタタグ内の文字エンコード情報を使用しているため、この値を維持しても有用ではありません。

代わりに、document.characterSet を使用して、HTTP ヘッダーで指定された最初の値を取得します。それが存在しない場合、<meta> 要素の charset 属性で指定された値(<meta charset="utf-8"> など)が取得されます。最後に、これらのいずれも使用できない場合、document.characterSet はユーザーのシステム設定になります。

これを明記しない理由について詳しくは、こちらの GitHub の問題をご覧ください。

要約: HTMLLinkElementrel 属性の subresource 値のサポートを削除。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

<link> の subresource 属性の目的は、ブラウザのアイドル時間中にリソースをプリフェッチすることでした。ブラウザはページをダウンロードした後、他のページなどのリソースをプリロードして、ユーザーがリクエストしたときにブラウザ キャッシュから簡単に取得できるようにしていました。

subresource 属性に複数の問題が発生しています。まず、この機能は意図したとおりに機能したことはありませんでした。参照されたリソースが低い優先度でダウンロードされた。この属性は、Chrome 以外のブラウザには実装されていません。Chrome の実装に、リソースが 2 回ダウンロードされるバグがありました。

コンテンツのプリロードによってユーザー エクスペリエンスを向上させるには、いくつかの方法があります。その中で最もカスタマイズしやすい方法は、プリキャッシュと Caches API を活用するサービス ワーカーを構築することです。その他の解決策としては、preconnectprefetchpreloadprerender など、rel 属性の他の値があります。これらのオプションの一部は試験運用版であり、広範囲にサポートされていない場合があります。

安全でない TLS バージョンのフォールバックを削除

要約: 安全性の低いバージョンまたは安全でないバージョンの TLS を使用してサーバーにデータを返すように強制するメカニズムを削除。

削除の目的 | Chromestatus Tracker | Chromium バグ

Transport Layer Security(TLS)は、バージョンのネゴシエーション メカニズムをサポートしているため、互換性を損なうことなく新しい TLS バージョンを導入できます。一部のサーバーでは、ブラウザがフォールバックとして安全でないエンドポイントを使用する必要が生じる形でこれを実装していました。このため、攻撃者は、構成が正しくないウェブサイトだけでなく、すべてのウェブサイトで、より弱いバージョンの TLS をネゴシエートするように強制できます。

影響を受けるサイトは ERR_SSL_FALLBACK_BEYOND_MINIMUM_VERSION に接続できなくなります。管理者は、サーバー ソフトウェアが最新の状態であることを確認する必要があります。それでも問題が解決しない場合は、サーバー ソフトウェア ベンダーに連絡して、修正が利用可能かどうかを確認します。

KeyboardEvent.prototype.keyLocation を削除

要約: Keyboard.prototype.location 属性の不要なエイリアスを削除します。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

この属性は、Keyboard.prototype.location 属性のエイリアスです。これにより、キーボード上の複数の場所にあるキーを区別できます。たとえば、拡張キーボードでは両方の属性を使用することで、2 つの Enter キーを区別できます。

RTCPeerConnection メソッドで必要なエラー ハンドラと成功ハンドラ

要約: WebRTC の RTCPeerConnection メソッド createOffer()createAnswer() には、成功ハンドラに加えてエラーハンドラも必要になります。これまでは、成功ハンドラのみを使用してこれらのメソッドを呼び出すことができました。この使用は非推奨になりました。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

Chrome 49 では、エラー ハンドラを指定しないで setLocalDescription() または setRemoteDescription() を呼び出す場合に警告を追加しました。Chrome 50 では、エラーハンドラ引数は必須です。

これは、WebRTC 仕様で要求されているように、これらのメソッドにプロミスを導入するための準備の一環です。

以下は、WebRTC の RTCPeerConnection デモの例です(main.js、行 126)。

    function onCreateOfferSuccess(desc) {
      pc1.setLocalDescription(desc, function() {
         onSetLocalSuccess(pc1);
      }, onSetSessionDescriptionError);
      pc2.setRemoteDescription(desc, function() {
        onSetRemoteSuccess(pc2);
      }, onSetSessionDescriptionError);
      pc2.createAnswer(onCreateAnswerSuccess, onCreateSessionDescriptionError);
    }

setLocalDescription()setRemoteDescription() の両方にエラー ハンドラがあることに注意してください。成功ハンドラのみを想定している古いブラウザでは、エラー ハンドラ引数がある場合でも無視されます。古いブラウザでこのコードを呼び出しても例外は発生しません。

一般に、本番環境の WebRTC アプリケーションでは、仕様の変更や接頭辞の違いからアプリを保護するために、WebRTC プロジェクトによって管理されている shim である adapter.js を使用することをおすすめします。

XMLHttpRequestProgressEvent のサポート終了

要約: XMLHttpRequestProgressEvent インターフェースと、position 属性と totalSize 属性が削除されます。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

このイベントは、Gecko 互換性プロパティ positiontotalSize をサポートするために存在していました。これら 3 つのサポートは Mozilla 22 で廃止され、この機能は ProgressEvent に長い間置き換えられています。

     var progressBar = document.getElementById("p"),
          client = new XMLHttpRequest()
      client.open("GET", "magical-unicorns")
      client.onprogress = function(pe) {
        if(pe.lengthComputable) {
          progressBar.max = pe.total
          progressBar.value = pe.loaded
        }
      }

接頭辞付きの Encrypted Media Extensions を削除

要約: プレフィックス付きの Encrypted Media Extension は削除され、スペックベースのプレフィックスなしの置き換えが使用されるようになりました。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

Chrome 42 では、プレフィックスのない Encrypted Media Extension の仕様ベースのバージョンがリリースされました。この API は、HTMLMediaElement で使用するためにデジタル著作権管理システムを検出して選択し、操作するために使用されます。

それから 1 年近く経ちます。接頭辞のないバージョンには接頭辞付きバージョンよりも多くの機能があるため、API の接頭辞付きバージョンを削除する時期です。

SVGElement.offset プロパティのサポートを削除

要約: SVGElement のオフセット プロパティは削除され、HTMLElement でより広くサポートされているプロパティに置き換えられました。

削除の意向 | Chromestatus トラッカー | Chromium のバグ

オフセット プロパティは長い間、HTMLElementSVGElement の両方でサポートされていましたが、Gecko と Edge では HTMLElement でのみサポートされています。ブラウザ間の一貫性を改善するため、これらのプロパティは Chrome 48 で非推奨になり、現在削除されています。

同等のプロパティが HTMLElement に含まれていますが、代替機能をお探しのデベロッパーは getBoundingClientRect() も使用できます。