Javascript 检测android webview

Javascript 检测android webview,javascript,android,html,webview,uiwindow,Javascript,Android,Html,Webview,Uiwindow,我有一个HTMLJavaScript页面,我需要检测它何时在web视图上打开(如在facebook webview、twitter webview等内部),以及它是否是一个web视图-显示另一个内容 注意:我不控制第三方Android应用程序,因此我无法更改它们的代码 我已经找到了检测IOS网络视图的方法(在stackoverflow上找到): var isIosWebview=/(iPhone | iPod | iPad)。*AppleWebKit(?。*Safari)/i.test(navi

我有一个
HTMLJavaScript
页面,我需要检测它何时在web视图上打开(如在facebook webview、twitter webview等内部),以及它是否是一个web视图-显示另一个内容

注意:我不控制第三方Android应用程序,因此我无法更改它们的代码

我已经找到了检测IOS网络视图的方法(在stackoverflow上找到):

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

现在我正在寻找一个javascript代码,可以检测Android web视图


帮助?

仅使用用户代理字符串无法检测到它,因为任何使用WebView的应用程序都可以将UA字符串设置为它想要的任何内容

如果您仍然坚持使用UA字符串,这是官方文档的解释:最初,基于Chrome的WebView使用
.0.0
作为Chrome版本后缀;在较新的版本中
;wv
已添加到UA字符串的平台部分。请注意,pre-KitKat Webview没有
Chrome
部分。请参阅以前的帖子:

WebView参与的另一个提示是存在带有应用程序包名称的
X-Requested-With
HTTP头。注意,这个头也是由XMLHttpRequest设置的,所以您需要查找头的实际值


WebView不支持iframes的说法是不正确的。

我知道怎么做。这很简单。因为Android web view使用一个对象通过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)

regex包括旧Android、新Android和iOS版本的案例。

我需要在不使用用户代理(因为它可能被欺骗)和不读取服务器端标题的情况下检测浏览器是否为Android WebView

看起来他们很狡猾地隐藏了这一点,但是你可以检查
窗口
是否有一个名为
“Android”
的属性(末尾有一个空格)。仅当在应用程序中用作网络视图时,而不是在同一设备上的Chrome中,才显示为
true

const isAndroidWebView = window.hasOwnProperty('Android ')

免责声明:我只在运行安卓10的像素3和运行安卓9的诺基亚6上验证了这一点。如果此选项对您的设备有效或无效,请发表评论。

那么您没有找到此选项并尝试其他操作?我已经尝试了之前的链接,你附加。“chrome/Mobile”存在于webview上,但它也存在于常规android浏览器上-因此它没有帮助。“Version/4.0”似乎是android webview所独有的。我在查看第一个webview(twitter)-chrome/33.0.0.0 Mobile我知道IFrame不仅在web视图上受支持,因此,我有一个指示-但我不想依赖这些信息…我如何获得“X-request-With”。我查了一下,没有找到一个好方法来获取它。你可以在服务器上看到它。在flask python中,您可以执行
request.headers.get('X-Requested-With')
并在webView的情况下为您提供包名。它帮助我阻止了在网络视图上非法显示我的网站的应用程序。谢谢!根据我最近的经验,我意识到,每当你在javascript中使用这样的接口对象时,你都会希望执行这种类型的测试,以确保你至少可以在浏览器中测试页面的外观。这似乎对我不起作用。我在一个仿真器内的Android Webview中进行了尝试。@gil.fernandes此代码是JavaScript,在Android代码中未使用此代码。JavaScript。在Facebook Android webview中对我不起作用。(Android的类型==“未定义”)显然返回True