編集:以下は、Windows Phone 8.1でのスワイプによるナビゲーションを防止しませんが、Windows8.1タブレットでのスワイプナビゲーションを防止します。誰かに部分的に役立つかもしれないので、ここに答えを残します。
ページがビューポートよりも大きい場合(タッチしてパン)、次のCSSが機能します(編集:8.1タブレットでのみ)。
html {
-ms-scroll-chaining: none;
}
ページがビューポートよりも小さい場合(つまり、ページがスクロール可能/パン可能でない場合、たとえばズームアウトされている場合)、上記は機能しません。
ただし、次のようなコードは私にとっては機能します(編集:8.1タブレットのみ):
CSS:
html.disable-ie-back-swipe {
overflow: scroll;
-ms-scroll-chaining: none;
}
JavaScript:
if (navigator.msMaxTouchPoints) {
if (/Windows Phone/.test(navigator.userAgent)) {
document.documentElement.classList.add('disable-ie-back-swipe');
} else {
try {
var metroTestElement = document.createElement('div');
metroTestElement.style.cssText = 'position:absolute;z-index:-1;top:0;right:0;bottom:-10px;width:1px';
document.body.appendChild(metroTestElement);
if (Math.round(window.outerWidth - metroTestElement.offsetLeft) === 1) {
document.documentElement.classList.add('disable-ie-back-swipe');
}
document.body.removeChild(metroTestElement);
} catch (e) { // window.outerWidth throws error if in IE showModalDialog
}
}
}
JavaScriptに関する注意:
- テスト
navigator.msMaxTouchPoints
では、これがIE10 / IE11であり、デバイスがタッチを使用していることを確認します。
- 編集:Windows Phoneを検出し、disable-ie-back-swipeを設定しますが、CSSは実際にはWindows Phone8.1ARRRGHの機能を無効にしません。
- MetroTestElementは、モダンをテストします(モダンにはスクロールバーがないため、右は1ピクセルですが、デスクトップにはスクロールバーがあるため、スクロールバーの幅に応じて右は18ピクセル程度です)。
- このコードは、IE11とmodernが使用されている場合にのみ、バックスワイプを無効にします。
- CSSルールにはhtmlまたはbodyのいずれかを使用できるようですが、どちらが実際に優れているかはわかりません(IMHOは通常、bodyをページでスクロール不可と見なし、htmlをビューポート/ウィンドウと見なしますが、実際にはIE実装の詳細)。
編集2:このIE機能は「フリップアヘッド」と呼ばれます。企業はグループポリシーを使用して無効にできる場合があります-http://www.thewindowsclub.com/enable-disable-flip-feature-internet-explorer-10を参照してください