检测 android 网络视图
Detect android webview
我有一个 html-javascript
页面,我需要检测它何时在网络视图中打开(比如在 facebook webview、twitter webview 等中),如果它是 webview - 显示另一个内容。
注意:我不控制第三方Android应用程序,所以我不能更改他们的代码。
我已经找到了检测 IOS webview 的方法(在 Whosebug 上找到):
var isIosWebview =/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent)
现在我正在寻找可以检测 Android 网络视图的 javascript 代码。
帮忙?
您无法仅使用用户代理字符串来检测它,因为任何使用 WebView 的应用都可以将 UA 字符串设置为它想要的任何内容。
如果你还坚持使用UA字符串,这是官方文档的解释:最初,Chromium-based WebView使用.0.0.0
作为Chrome版本后缀;在较新的版本中,; wv
被添加到 UA 字符串的平台部分。请注意,pre-KitKat WebViews 没有 Chrome
部分。查看有关此的旧帖子:Android, webview user agent vs browser user agent
WebView 参与的另一个提示是 X-Requested-With
HTTP header 和应用程序包名称的存在。注意这个 header 也是由 XMLHttpRequest 设置的,所以你需要寻找 header.
的实际值
WebView不支持iframe的说法不正确。
我知道怎么做了。这很简单。因为 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
}
此线程中其他人提供的信息为我提供了解决此问题所需的信息。对于其他人,这是生成的 JS 正则表达式,它代表接受的答案中描述的检测:
/(Version\/\d+.*\/\d+.0.0.0 Mobile|; ?wv|(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari))/i.test(navigator.userAgent)
正则表达式包括旧 Android、新 Android、iOS 版本的大小写。
我需要检测浏览器是否是 Android WebView,而不使用 User-Agent(因为它可以被欺骗),并且不读取 Headers 服务器端。
他们似乎很偷偷摸摸地隐藏了这一点,但您可以检查 window
是否有一个名为 "Android "
的 属性(末尾有一个 space ).这似乎是 true
仅当在应用程序中用作 WebView 时,而不是在同一设备上的 Chrome 中。
const isAndroidWebView = window.hasOwnProperty('Android ')
免责声明: 我只在 Pixel 3 运行 Android 10 和 Nokia 6 运行 Android 9. 如果这对您的设备有效或无效,请发表评论。
我有一个 html-javascript
页面,我需要检测它何时在网络视图中打开(比如在 facebook webview、twitter webview 等中),如果它是 webview - 显示另一个内容。
注意:我不控制第三方Android应用程序,所以我不能更改他们的代码。
我已经找到了检测 IOS webview 的方法(在 Whosebug 上找到):
var isIosWebview =/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent)
现在我正在寻找可以检测 Android 网络视图的 javascript 代码。
帮忙?
您无法仅使用用户代理字符串来检测它,因为任何使用 WebView 的应用都可以将 UA 字符串设置为它想要的任何内容。
如果你还坚持使用UA字符串,这是官方文档的解释:最初,Chromium-based WebView使用.0.0.0
作为Chrome版本后缀;在较新的版本中,; wv
被添加到 UA 字符串的平台部分。请注意,pre-KitKat WebViews 没有 Chrome
部分。查看有关此的旧帖子:Android, webview user agent vs browser user agent
WebView 参与的另一个提示是 X-Requested-With
HTTP header 和应用程序包名称的存在。注意这个 header 也是由 XMLHttpRequest 设置的,所以你需要寻找 header.
WebView不支持iframe的说法不正确。
我知道怎么做了。这很简单。因为 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
}
此线程中其他人提供的信息为我提供了解决此问题所需的信息。对于其他人,这是生成的 JS 正则表达式,它代表接受的答案中描述的检测:
/(Version\/\d+.*\/\d+.0.0.0 Mobile|; ?wv|(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari))/i.test(navigator.userAgent)
正则表达式包括旧 Android、新 Android、iOS 版本的大小写。
我需要检测浏览器是否是 Android WebView,而不使用 User-Agent(因为它可以被欺骗),并且不读取 Headers 服务器端。
他们似乎很偷偷摸摸地隐藏了这一点,但您可以检查 window
是否有一个名为 "Android "
的 属性(末尾有一个 space ).这似乎是 true
仅当在应用程序中用作 WebView 时,而不是在同一设备上的 Chrome 中。
const isAndroidWebView = window.hasOwnProperty('Android ')
免责声明: 我只在 Pixel 3 运行 Android 10 和 Nokia 6 运行 Android 9. 如果这对您的设备有效或无效,请发表评论。