Javascript Facebook应用程序的深度链接(使用fb:protocol)在应用程序浏览器中无法从Facebook运行

Javascript Facebook应用程序的深度链接(使用fb:protocol)在应用程序浏览器中无法从Facebook运行,javascript,php,html,facebook,.htaccess,Javascript,Php,Html,Facebook,.htaccess,我正在写一个移动网页,它有一个重定向和两个手动备份链接(当重定向不起作用时)到Facebook页面 链接的形式如下: fb://page/[PAGE ID NUMBER] 重定向和链接在Chrome Mobile和Firefox Mobile中工作,但(令人惊讶的是)它们在Facebook浏览器中不工作,这反而给了我一个错误: Page can't be loaded. 我很困惑,Facebook应用程序的链接在Facebook浏览器中不起作用 我如何解决这个问题?有没有创造性的解决方案或变

我正在写一个移动网页,它有一个重定向和两个手动备份链接(当重定向不起作用时)到Facebook页面

链接的形式如下:

fb://page/[PAGE ID NUMBER]
重定向和链接在Chrome Mobile和Firefox Mobile中工作,但(令人惊讶的是)它们在Facebook浏览器中不工作,这反而给了我一个错误:

Page can't be loaded.
我很困惑,Facebook应用程序的链接在Facebook浏览器中不起作用

我如何解决这个问题?有没有创造性的解决方案或变通办法。。。还是我错过了一些明显的东西


其他信息:看起来重定向在Facebook iOS应用程序的至少一个版本的Facebook浏览器中工作。因此,这个问题可能与Facebook Android应用程序无关


更新1 我取得了一些进展。我发现Facebook的应用程序内浏览器并不总是(或永远不会)确认/加载/执行外部脚本文件

添加:(要了解原因,请参阅下面的更新8

在这种情况下,链接中的
href
属性在页面加载后由外部脚本重新填充
fb://
协议链接

我已经将相关的javascript函数从外部脚本移到了实际页面的底部。我已经测试了这些功能,现在可以看到它们正在激活。尽管链接仍然不起作用


更新2 让我吃惊的是,在幕后可能存在某种安全机制,不允许任何javascript驱动的
href
属性重新填充,而不是
fb://
协议链接不起作用,可能是初始,默认值<代码>http://www.facebook.com/链接甚至从未被替换过,而那些http://协议链接不起作用

因此,我更新了PHP模板,因此初始默认链接是
fb://
,而不是
http://
链接(因此,在任何时候,交付到Facebook应用程序浏览器的页面中的任何内容都不需要任何客户端脚本进行更新)

没有。仍然不起作用


更新3 我在页面底部添加了一个普通的链接,链接到网站的主页。这条链路运行完全正常

后来,我将原始链接指向外部域。他们没有工作

所以。。。我的结论是,只有
http://
协议链接到同一个域才能工作,这就是为什么链接指向外部域或
fb://
协议地址时无法工作

错误的结论

我将原始链接指向了网站的主页,它们仍然不起作用


更新4 灵感迸发之际,我删除了对外部脚本的引用,该脚本是我为定制OS+浏览器环境的链接而设置的(根据FB调试工具,Facebook完全忽略了该脚本引用)

链接起作用了

因此,我之前添加的普通链接之所以有效,与它指向的位置无关,只是因为在任何时候都没有脚本试图访问或更新它

添加:(这不是原因。请参阅下面的更新8

我将原始链接指向外部域。它们有效

我将原始链接指向
fb://
协议。它们不起作用


更新5 现在我已经去掉了外部脚本引用,我可以将原始协议链接指向任何
http://
协议地址,它们就可以工作了

包括
http://www.facebook.com
web相当于我试图在Facebook应用程序中打开的页面

让我们回顾一下:

Facebook网站将在Facebook应用程序浏览器中打开

我知道,对吧


更新6[.HTACCESS重定向] 我将链接目的地更改为
/fb custom redirect/

然后我在我的
.htaccess
文件的
mod\u rewrite
部分添加了一行:

RewriteRule ^fb-custom-redirect fb://page/[PAGE ID NUMBER]
当然,服务器不理解我的要求


更新7[PHP重定向] 我为
/fb custom redirect/
创建了
index.php
,并添加了以下内容:

<?php
header('Location: fb://page/[PAGE ID NUMBER]');
?>

更新8 我刚刚发现,当Facebook调试器工具()刷新给定页面的Facebook缓存时,它只刷新
.html

再次按Scrape不会刷新任何外部资源,如
.css
.js
文件

相反,Facebook继续引用这些文件的缓存版本,而不管
.html
文件缓存刚刚更新

解决方法(至少在
PHP
中)是在每次加载页面时使用新的随机生成的查询字符串追加文件路径:

<link rel="stylesheet" href="/styles/mystyles.css?'.uniqid().'" />

现在Facebook应用程序浏览器正在获取我的
.css
.js
文件的最新版本

这解释了我在更新1中的最初观察:

我已经取得了一些进展。我发现Facebook在应用程序中 浏览器并不总是(或永远不会)确认/加载/执行 外部脚本文件

我将得出结论,Facebook应用程序浏览器每次都在分析外部
.js
文件引用,但它重复访问该文件的旧缓存版本


尽管如此,即使在以上所有的假设和实验之后,我仍然不确定
<link rel="stylesheet" href="/styles/mystyles.css?'.uniqid().'" />