我正在开发网络应用程序,我使用Facebook分享我的内容,我面临的问题是当有人点击Facebook上发布的链接有时它会在应用程序浏览器中使用Facebook打开并导致许多问题。
有没有办法阻止Facebook使用我的链接并使用设备默认浏览器?
完全取决于用户,没有办法强制在默认浏览器中打开它。这个帖子中有更多信息(和一些答案):File upload control not working in Facebook In-App Browser
我无法让我的js动态网格在Facebook应用程序内浏览器中运行,但我不能只是让用户知道出了什么问题,他们需要在真正的浏览器中打开。
我使用js来检测Facebook应用程序内浏览器,并尝试使用js警报通知用户他们需要“在safari中打开”,但警报不能与Facebook应用内浏览器一致或可靠地工作。
我发现重定向到用户警报页面是最可靠的解决方案。它可以根据需要显示(模态等)包含重定向的代码示例。请注意,重定向页面仍保留在Facebook浏览器中 - 只有用户交互才能突破。我使用我的重定向页面告诉人们使用'在Safari中打开'共享>功能。
当用户点击“在safari中打开”时,重定向页面会在safari中重新加载,检测到它现在不在Facebook应用内浏览器中,并自动将用户重定向回到他们想要的页面,但是没有从Facebook应用内浏览器中获取更长时间。 “一键式”解决方法,让用户退出该应用内浏览器。
最好的解决方案仍然是我的js网格有一天在Facebook浏览器中“正常工作”。如果有人弄明白,请告诉我。
<!-- check if running in facebook app -->
<script>
var ua = navigator.userAgent || navigator.vendor || window.opera;
function isFacebookApp() {
return (ua.indexOf("FBAN") > -1) && (ua.indexOf("FBAV") > -1);
}
if (isFacebookApp()) {
window.parent.location.assign("https://yourdomain.com/redirect_page/index.html");
}
</script>
基于Mcbeese
<!-- check if running in facebook app -->
<script>
var ua = navigator.userAgent || navigator.vendor || window.opera;
function isFacebookApp() {
return (ua.indexOf("FBAN") > -1) || (ua.indexOf("FBAV") > -1);
}
if (isFacebookApp()) {
if (!window.location.href.match('redirect_fb')) {
window.location.href = "https://example.com/redirect_fb";
}
}
</script>
或者......不那么复杂。为什么有一个名为isFacebookApp()的函数,以及为什么只在寻找FB应用程序内浏览器时定位Opera呢?
<script>
var ua = navigator.userAgent;
if (ua.indexOf("FBAN") != -1 || ua.indexOf("FBAV") != -1) {
if (!window.location.href.match('redirect_fb')) {
window.location.href = "https://example.com/redirect_fb";
}
}
</script>
谢谢你们俩。这让我疯了。我的主要问题是我的Android上的字体被放大了。现在我发现使用fontsz = Math.round(fontsz * .7)减少是完美的抵消(当检测到FB应用程序时)
我发现Android将通过外部浏览器打开Firebase Dynamic Links,无论发布的是哪种webview。
我在https://stackoverflow.com/a/56143217/3000586写了一个更详细的描述。