2017-08-22 1 views
19

Je souhaite être en mesure de détecter un utilisateur lorsque l'utilisateur parcourt une page Web dans l'application Twitter. En détectant, je veux juste ajouter une classe de corps que je vais utiliser pour changer la façon dont la page recherche les utilisateurs dans l'application Twitter. Cependant, tous mes essais ont jusqu'ici échoué.Comment détecter les pages lorsqu'un internaute navigue à l'intérieur de Twitter dans l'application?

Je peux détecter WebView dans l'application Facebook en utilisant le code suivant

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

J'ai regardé autour/googlé autour/vérifié les autres solutions stackoverflow. Cependant, je ne pouvais pas trouver une solution où je peux détecter Twitter dans l'application. C'est-à-dire, je veux détecter quand un utilisateur navigue une page dans l'application de gazouillement.

Les choses que j'ai essayé et échoué sont inférieurs

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

ou

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

ou le contrôle du navigateur, périphérique, le vendeur, le modèle, le type de dispositif, moteur, os, version os (pourquoi je vérifiais ça?!?). J'ai vérifié en utilisant Modernizr; Cependant, aucune différence n'a été trouvée entre Safari autonome et Twitter intégré. En outre, vérifié à l'aide Detect if user is using webview for android/iOS or a regular browser

également essayé ce qui suit à l'échec

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 '); 
} 
    } 

Répondre

6

Je ne crois pas qu'il soit possible de détecter le Twitter en application navigateur en JavaScript, car il utilise une vue Web générique sans identifiable Propriétés.

La plupart de vos exemples reposent sur la recherche de la chaîne d'agent utilisateur pour des mots clés spécifiques. Voici une comparaison de chaînes de l'agent utilisateur entre les navigateurs concernés dans iOS 11 pour iPad à partir d'un test que je vient de mener:

Safari

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 (in-app)

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]

Twitter (in-app)

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

Vous pouvez voir que l'agent utilisateur du navigateur de Twitter est identique à Safari.

Évidemment, ce n'est pas une solution à votre problème, mais plutôt une explication pour laquelle vous n'avez pas trouvé de réponse.

+0

C'est très triste à savoir. :( –

+3

Apple n'autorise pas les autres moteurs de navigateur sur ios, car ils sont tous basés sur WebKit, c'est pourquoi l'agent utilisateur est exactement le même entre les applications: les applications twitter et facebook utilisent toutes le même moteur de navigateur. Peut-être changer de stratégie et voir s'il y a des paramètres url spécifiques à l'application dans le contexte de la page ou peut-être même des variables js.Vous devrez chercher des différences.SwagatoBhatta pourrait essayer les empreintes digitales du navigateur, même si elles ne sont pas assez fiables. –