如何检测页面,当用户在应用程序里面叽叽喳喳浏览?

问题描述 投票:20回答:2

我希望能够在用户浏览Twitter的应用程序内部的网页来检测用户。通过检测,我只想补充一点,我会用它来改变页面查找Twitter的应用程序内部的用户的方式体类。然而,我的所有尝试到目前为止还没有。

我可以用下面的代码检测的Facebook应用程序内部的WebView

var ua = navigator.userAgent;
if ((ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1)) {
  return 'facebook';
}

我环顾四周/一派左右/检查其他StackOverflow的解决方案。但是,我无法找到一个解决方案,我可以检测应用程序内的Twitter。也就是说,我希望当用户浏览Twitter的应用程序内部的页面来检测。

我曾尝试和失败的事情是下面

   if (/Twitter for/i.test(nua) === true) {
      return 'twitter';
   }

要么

if (/\/\/t.co\//i.test(document.referrer) === true && /Safari\//.test(nua) === false) {
  return 'twitter';
}

或检查浏览器,设备供应商,型号,设备类型,引擎,操作系统,操作系统版本(为什么我检查这个?!?)。我检查了使用Modernizr的;但是,没有差异,作为独立的Safari浏览器的Twitter之间和应用内找到。此外,使用Detect if user is using webview for android/iOS or a regular browser检查

也试图与失败以下

   var userAgent = window.navigator.userAgent.toLowerCase(),
      safari = /safari/.test( userAgent ),
      ios = /iphone|ipod|ipad/.test( userAgent );

var standalone = window.navigator.standalone,
  userAgent = window.navigator.userAgent.toLowerCase(),
  safari = /safari/.test( userAgent ),
  ios = /iphone|ipod|ipad/.test( userAgent );

if( ios ) {
  if ( safari ) {
    $('.debug').prepend('Yeah I am a browser in ios');
  } else if ( !safari ) {
    $('.debug').prepend('Yeah I am a webview in ios');
  }
} else {
  $('.debug').prepend('Yeah I am NOT a ios');
}

if( ios ) {
  if ( !standalone && safari ) {
    $('.debug').prepend('Yeah I am a browser in ios');
  } else if ( standalone && !safari ) {
    $('.debug').prepend('Yeah I am a standaline in ios');
  } else if ( !standalone && !safari ) {
    $('.debug').prepend('Yeah I am WEBVIEW');
  }
} else {
  $('.debug').prepend('Yeah I am NOT IOS');
}

var isWebView = !/safari/.test( window.navigator.userAgent.toLowerCase()) || navigator.platform === 'iOS' || navigator.platform === 'iPhone'
$('.debug').prepend('<br>isWebView? : ' + isWebView + "<br>");
$('.debug').prepend('<br>AM I WEBVIEW?: ' + /AppName\/[0-9\.]+$/.test(navigator.userAgent));

var is_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(navigator.userAgent);
var is_safari_or_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit/i.test(navigator.userAgent);
$('.debug').prepend('<br> is_uiwebview :' + is_uiwebview);
$('.debug').prepend('<br> is_safari_or_uiwebview :' + is_safari_or_uiwebview);


var uaSafari = navigator.userAgent.match(/Safari/i)
var uaSafariInput = navigator.userAgent.match(/Safari/i).input
var uaSafariIndex  = navigator.userAgent.match(/Safari/i).index
$('.debug').prepend('<br> ' + uaSafari + '<br>' + uaSafariInput + '<br>' + uaSafariIndex + '<br>' + navigator.vendor + '<br>' + navigator.product + '<br>' + navigator.productSub + '<br>' + navigator.languages.length + '<br>' + navigator.doNotTrack + '<br>' + navigator.maxTouchPoints + navigator.maxTouchPoints);

//Check headers and see if any difference there
var req = new XMLHttpRequest();
req.open('GET', document.location, false);
req.send(null);
var headers = req.getAllResponseHeaders().toLowerCase();
$('.debug').prepend('<br> headers \t ' + headers);


if (/Twitter for/i.test(navigator.userAgent) === true) {
  $('.debug').prepend('<br> Test1 ');
}

$('.debug').prepend('<br> Document referrer is : '+ document.referrer + " <br> ");

if (/\/\/t.co\//i.test(document.referrer) === true && /Safari\//.test(navigator.userAgent) === false) {
  $('.debug').prepend('<br> Test2 ');
}
  }
javascript jquery twitter browser
2个回答
8
投票

我不相信这是可能检测到Twitter的应用程序内浏览器在JavaScript中,因为它使用没有标识属性的通用Web视图。

大部分的例子依靠搜索特定关键词的用户代理字符串。下面是根据我只是进行了一个测试在iOS中11相关的浏览器iPad版之间的用户代理字符串的比较:

苹果浏览器

Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5372a Safari/604.1

Facebook的(在应用内)

Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A5372a [FBAN/FBIOS;FBAV/140.0.0.63.89;FBBV/70896504;FBDV/iPad4,2;FBMD/iPad;FBSN/iOS;FBSV/11.0;FBSS/2;FBCR/AT&T;FBID/tablet;FBLC/en_US;FBOP/5;FBRV/0]

推特(应用程式)

Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5372a Safari/604.1

你可以看到,Twitter的浏览器的用户代理是相同的Safari浏览器。

显然,这不是你的问题的解决方案,但更多的解释,为什么你还没有找到一个实际的答案。


1
投票

您可以检查是否navigator.mediaDevices是不确定的。由于的WebRTC是不是在网页视图支持,它会在Twitter上是不确定的,但目前在Safari浏览器。

© www.soinside.com 2019 - 2024. All rights reserved.