如何检测 Facebook 应用内浏览器?

Posted

技术标签:

【中文标题】如何检测 Facebook 应用内浏览器?【英文标题】:How to detect Facebook in-app browser? 【发布时间】:2015-10-12 16:55:50 【问题描述】:

您有过 Facebook 应用内浏览器检测方面的经验吗? 用户代理的核心区别是什么?

我不想知道它是否是唯一的移动/ios/chrome。我需要知道用户代理是否特定于 Facebook 应用内浏览器

【问题讨论】:

【参考方案1】:

您可以在用户代理中检查 FBAN / FBAV。

检查此链接: Facebook user agent

【讨论】:

ua.indexOf("FBAN") > -1 和 ua.indexOf("FBAV") > -1 是什么意思?强制用户使用网络浏览器而不是应用内浏览器? @RobbNesp var us = navigator.userAgent 给你一个字符串值。 .indexOf() 检查字符串中子字符串的位置。如果未找到,则返回值 -1。它只是通过检查浏览器的用户代理是否包含给定的子字符串来检查它是否是 Facebook 浏览器。 谢谢!也分享 Instagram 的 sn-p:(ua.indexOf('Instagram') > -1) 我在答案中添加了 sn-p,谢谢@jeff_drumgod 您能解释一下|| window.opera 位吗?我认为它不会转换为用户代理字符串。【参考方案2】:

要完成worker11811关于使用用户代理的回答,这里有一个代码sn-p来使它工作:

function isFacebookApp() 
    var ua = navigator.userAgent || navigator.vendor || window.opera;
    return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1);

【讨论】:

【参考方案3】:

您可以使用https://www.npmjs.com/package/detect-inapp 并检查 inapp.isInApp() 是否为真

【讨论】:

【参考方案4】:

这个 javascript 运行良好

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

if( ios ) 
    if ( !standalone && safari ) 
        //browser
     else if ( standalone && !safari ) 
        //standalone
     else if ( !standalone && !safari ) 
        //uiwebview (Facebook in-app browser)

    ;
 else 
    //not iOS
;

【讨论】:

OP 询问:“需要知道用户代理是否特定于 Facebook 应用内浏览器”。

以上是关于如何检测 Facebook 应用内浏览器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Facebook 应用内消息上实现深层链接

如何制作在 Safari for iOS Facebook Messenger 应用程序而不是应用程序内 Web 浏览器中打开的 URL

我的网站无法在 Facebook 应用内浏览器中打开

文件上传控件在 Facebook 应用内浏览器中不起作用

Facebook 应用程序的深层链接(使用 fb: 协议)在 Facebook 应用程序内浏览器中不起作用

无法检测Facebook的页面