UIWebView是否在请求标头中发送与移动Safari相同的用户代理?

dl.*_*dl. 31 iphone user-agent uiwebview

对不起,我会亲自测试一下,但我现在没有我的mac.在UIWebView内部发出的Web请求是否发送了与移动Safari发出的Web请求相同的用户代理信息?

dl.*_*dl. 34

从UIWebView发出的Web请求不会在User Agent字符串中包含单词"Safari".从Mobile Safari发出的Web请求将会.这是我发现确定请求来自应用程序或Mobile Safari的最佳方式.

App中的UIWebView示例用户代理:

User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile
Run Code Online (Sandbox Code Playgroud)

来自Mobile Safari的示例用户代理:

User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari
Run Code Online (Sandbox Code Playgroud)

  • 有谁知道这个答案在2020年是否仍然有效? (4认同)
  • @Johann Chrome/iOS不是一个不同的Web浏览器,它是一个UIWebView包装器.由于Chrome的UIWebView包含像Safari本身一样的"Safari",你不能通过检查那个单词来区分Safari*(一个UIWebView)(就像答案建议的那样) (3认同)
  • Android的webview发送http标题"X-Requested-With".独立浏览器没有.iPhone的UIWebView也可以这样做吗?见http://stackoverflow.com/a/15254092/90236 (2认同)

unc*_*eus 13

独立移动Safari用户代理字符串包含单词"Version",而uiWebView用户代理字符串则不包含.因此,可以修改检测脚本以使用最新版本的iOS,如下所示:

var is_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Version)/i.test(navigator.userAgent);
Run Code Online (Sandbox Code Playgroud)

  • `var is_uiwebview = /((iPhone|iPod|iPad).*AppleWebKit(?!.*Version)|; wv)/i.test(navigator.userAgent);` 还检测 android webviews (2认同)