6

Android 5.0+ Lollipop の時点で、デバイスのデフォルト ブラウザではなく、Android のキャプティブ ポータル ブラウザで起動するキャプティブ ポータルがあります。

それらがキャプティブ ポータル ブラウザー (通常の Web ブラウザーではなく) にあるかどうかを何らかの方法で検出し、そうである場合は別のコンテンツを表示する必要があります。

ユーザー エージェントを調べるか、Javascript を使用して、それらがキャプティブ ポータル ブラウザ ウィンドウ内にあるかどうかを検出することは可能ですか? Android 5.1 デバイスのユーザー エージェントを確認しましたが、それらを区別するものは何もありません。

キャプティブ ポータル ブラウザ:

Mozilla/5.0 (Linux; Android 5.1; Elite 5 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36

通常の Google Chrome:

Mozilla/5.0 (Linux; Android 5.1; Elite 5 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.94 Mobile Safari/537.36

バージョン番号にはわずかな違いがありますが、これは Android/Chrome のバージョン間で一貫性がなく、ブラウザーの種類を判断する信頼できる方法ではないようです。

それを検出する他の方法はありますか?前もって感謝します。

4

2 に答える 2

1

私がテストしている Pixel デバイスは、これらの両方のテストに合格しました -

try {

    const test = 'test';
    
    localStorage.setItem(test, test);
    localStorage.removeItem(test);
    sessionStorage.setItem(test, test);
    sessionStorage.removeItem(test);
    alert("We're in a chrome instance!")
} catch(e) {
    alert("We're inside a Captive Portal!")
}

Android 10 で実行中 - Pixel XL と通常の Pixel

他の多くのデバイスでは、上記の localStorage テストは正常に動作します。catch ブロックに入り、本格的な Chrome タブ/Android のデフォルト ブラウザ タブ内にいないことを確認しますが、Android ではキャプティブ ポータルの実行方法が変更されているようです。 .

于 2020-08-25T12:51:56.943 に答える