TL; DR版本:
Facebook浏览器中的部分JS代码不会在每次页面重新加载时执行-仅在几次重新加载后才执行。
问题:如何使Facebook应用程序内浏览器在每次页面加载时执行所有JS代码?这实际上应该是正常行为-实际上,其他浏览器(尝试使用Chrome和Safari)每次重新加载页面时都会执行代码。
细节:
在我的网站上,我有一个与用户登录/注销有关的问题。调试过程使我到达了将测试代码放在开头的位置<head>,以便检查我的cookie是否存在。我遇到的问题仅发生在Facebook应用程序内浏览器上。
因此,我有以下示例代码:
<!DOCTYPE html>
<html lang="da">
<head>
<script>
alert(document.cookie.match(/glt_.+?;/) || 'no glt_* cookie!');
</script>
<!-- other <script> tags here -->
</head>
<body>
...
</body>
</html>Run Code Online (Sandbox Code Playgroud)
重现此问题的步骤:
我在Facebook墙上使用此代码共享网址,然后转到iPhone 6s上的Facebook应用并点击链接;它会在应用内浏览器中打开。
现在,此代码应显示一个包含cookie或提示没有cookie的消息的警报。但是...根本没有警报。就像这alert部分代码不存在。
但是,刷新几次后,警报开始出现。并且,当它第一次出现时,它会在每次重新加载页面时一直出现,直到我点击“返回”按钮。然后,当我再次坐在墙上并再次点击链接时,整个情况重复出现-直到我刷新几次才发出警报。
对我来说,“未显示警告”基本上意味着“某些javascript未执行”-请让我知道如果我在这里输入错误,也许警报是在此浏览器中以特定方式处理的?其他JS(用户界面等)片段也可以正常工作。
到目前为止的调查:
在任何流行的浏览器上都不会发生此问题;每次都会显示警报。
另一件事:我杀死了Facebook应用程序(双击“主页”按钮以获取打开的应用程序列表,然后杀死Facebook)。然后,我重新打开Facebook,再次点击链接,然后...没有出现警报。我刷新了几次,最终出现了。
我还清除了应用程序设置中的浏览器缓存,但这并没有影响任何内容。