【问题标题】:Detect if webpage request if from browser versus UIWebView检测网页请求是否来自浏览器与 UIWebView
【发布时间】:2013-05-17 17:50:49
【问题描述】:

网络服务器是否知道页面请求是来自网络浏览器还是来自 IOS 应用内的 UIWebView。

例如,是否有任何网络服务器能够区分从网络浏览器请求的网页与 iOS 上的 Instapaper 应用程序?

【问题讨论】:

  • 可能是,但我从未尝试过。检查http请求头,如http-user-agent..

标签: ios uiwebview webserver


【解决方案1】:

Useragent 会有所作为。使用下面的检测代码

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

if(isWebView) {
    alert("Page serving through UIWebView");
} else {
    alert("Page serving through Browser");
}

【讨论】:

  • 适用于 iOS 的 Google Chrome(和其他浏览器)使用 UIWebView 并发送另一个用户代理。对此有什么想法吗?
  • 将 CriOS 添加到正则表达式的工作:/((iPhone|iPod|iPad).*AppleWebKit(?!.*Safari))|(CriOS)/i.test(navigator.userAgent);
  • 上述评论中的正则表达式将包括来自 Google Chrome 和类似 iOS 浏览器的请求(即,如果您收到其中一个请求,isWebView 将评估为 true)。如果您想排除它们,可以使用以下命令:/((iPhone|iPod|iPad).*AppleWebKit(?!.*(Safari|CriOS)))/i
【解决方案2】:

是的,每个用户代理都不同。

【讨论】:

  • 谢谢马丁,在这里进行更广泛的思考,我想知道是否存在网站(网络服务器)决定阻止通过 UIWebView(应用程序)发出的网页请求的情况,因为它正在提供内容来自他们以外的应用程序(有点像 Instapaper)。
  • 我不熟悉 Instapaper。您希望能够阻止来自不属于您的应用程序的流量吗?这个问题比你最初的问题更复杂,最重要的回应是你必须引入一些其他机制,可能使用证书或身份验证或 cookie 等。顺便说一下,使用 UIWebView 的应用程序可以根据需要更改用户代理,因此应用可以伪装成 Safari。
  • 其实我是从应用开发者的角度考虑的。我想确保网络服务器不能选择性地阻止来自应用程序的网络流量。所以 UIWebView 变形用户代理实际上是一个好主意。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 2013-06-14
  • 1970-01-01
相关资源
最近更新 更多