2017-08-22 68 views
19

Tôi muốn có thể phát hiện người dùng khi người dùng duyệt một trang web bên trong ứng dụng twitter. Bằng cách phát hiện, tôi muốn chỉ cần thêm một lớp cơ thể mà tôi sẽ sử dụng để thay đổi cách trang tìm kiếm người dùng bên trong ứng dụng twitter. Tuy nhiên, tất cả những nỗ lực của tôi cho đến nay đều thất bại.Cách phát hiện các trang khi người dùng duyệt bên trong twitter trong ứng dụng?

tôi có thể phát hiện webview bên trong ứng dụng Facebook bằng cách sử dụng đoạn mã sau

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

Tôi đã nhìn quanh/googled xung quanh/kiểm tra các giải pháp StackOverflow khác. Tuy nhiên, tôi không thể tìm thấy một giải pháp mà tôi có thể phát hiện twitter trong ứng dụng. Đó là, tôi muốn phát hiện khi người dùng duyệt một trang bên trong ứng dụng twitter.

Những điều tôi đã cố gắng và thất bại dưới

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

hoặc

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

hoặc kiểm tra cho trình duyệt, thiết bị, nhà cung cấp, mô hình, loại thiết bị, động cơ, os, phiên bản os (tại sao tôi kiểm tra điều này?!?). Tôi đã kiểm tra bằng Modernizr; tuy nhiên, không có sự khác biệt giữa Safari độc lập và Twitter trong ứng dụng. Ngoài ra, kiểm tra sử dụng Detect if user is using webview for android/iOS or a regular browser

cũng thử như sau với thất bại

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

Trả lời

6

Tôi không tin rằng nó có thể phát hiện các Twitter duyệt trong ứng dụng trong JavaScript, bởi vì nó sử dụng một Xem Web chung không có tính chất tính chất.

Hầu hết các ví dụ của bạn dựa vào tìm kiếm chuỗi tác nhân người dùng cho các từ khóa cụ thể. Dưới đây là một so sánh các chuỗi tác nhân người dùng giữa các trình duyệt có liên quan trong iOS 11 cho iPad dựa trên một bài kiểm tra tôi chỉ tiến hành:

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 (trong ứng dụng)

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

Bạn có thể thấy rằng user agent trình duyệt của Twitter là giống với Safari.

Rõ ràng đây không phải là giải pháp cho vấn đề của bạn, nhưng nhiều giải thích tại sao bạn chưa tìm thấy câu trả lời thực sự.

+0

Điều đó thật đáng buồn khi biết. : ( –

+3

Apple không cho phép các công cụ trình duyệt khác trên ios. Bên dưới tất cả đều dựa trên WebKit. Đó là lý do tại sao tác nhân người dùng giống hệt nhau giữa các ứng dụng. Ứng dụng twitter và facebook đều sử dụng cùng một công cụ trình duyệt dưới mui xe. Có thể thay đổi chiến lược và xem liệu có thông số url cụ thể cho ứng dụng trong ngữ cảnh trang hay thậm chí có thể là biến js.Bạn sẽ phải tìm hiểu về bất kỳ sự khác biệt nào. –

Các vấn đề liên quan