簡體   English   中英

檢測android webview

[英]Detect android webview

我有一個html-javascript頁面,我需要檢測它何時在 web 視圖中打開(比如在 facebook webview、twitter webview 等中),如果它是 webview - 顯示另一個內容。

注意:我不控制第三方 Android 應用程序,因此我無法更改它們的代碼。

我已經找到了一種檢測 IOS webview 的方法(在 stackoverflow 上找到):

var isIosWebview =/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent)

現在我正在尋找可以檢測 Android 網頁視圖的 javascript 代碼。

幫助?

您不能僅使用用戶代理字符串來檢測它,因為任何使用 WebView 的應用程序都可以將 UA 字符串設置為它想要的任何內容。

如果你還堅持使用 UA 字符串,這是官方文檔的解釋:最初,基於 Chromium 的 WebView 使用.0.0.0作為 Chrome 版本后綴; 在較新的版本中; wv ; wv被添加到 UA 字符串的平台部分。 請注意,KitKat 之前的 WebViews 沒有Chrome部分。 請參閱關於此的舊帖子: Android、webview 用戶代理與瀏覽器用戶代理

另一個涉及 WebView 的提示是存在帶有應用程序包名稱的X-Requested-With HTTP 標頭。 注意這個header也是由XMLHttpRequest設置的,所以需要查找header的實際值。

WebView 不支持 iframes 的說法是不正確的。

該線程中其他人提供的信息為我提供了解決此問題所需的信息。 對於其他人,這是生成的 JS 正則表達式,它代表了已接受答案中描述的檢測:

/(Version\/\d+.*\/\d+.0.0.0 Mobile|; ?wv|(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari))/i.test(navigator.userAgent)

正則表達式包括適用於舊 Android、新 Android、iOS 版本的案例。

我知道該怎么做。 這很簡單。 因為 Android 網絡視圖使用一個對象通過 javascript 觸發其 Android 應用程序中的功能。 所以在你的 js 代碼中你可以使用:

if (typeof Android === "undefined") {
    // do something if is NOT a web view
} else {
    // do something else if is a web view
}

我需要在不使用 User-Agent(因為它可以被欺騙)並且不讀取 Headers 服務器端的情況下檢測瀏覽器是否是 Android WebView。

看起來他們在隱藏這個方面非常狡猾,但是您可以檢查window是否具有名為"Android "的屬性(末尾有一個空格)。 這似乎僅在用作應用程序內的 WebView 時才true ,而不是在同一設備上的 Chrome 中。

const isAndroidWebView = window.hasOwnProperty('Android ')

免責聲明:我僅在運行 Android 10 的 Pixel 3 和運行 Android 9 的諾基亞 6 上驗證了這一點。請評論這是否適用於您的設備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM