【问题标题】:Firefox blocking Facebook JsFirefox 阻止 Facebook Js
【发布时间】:2021-10-30 04:45:32
【问题描述】:

随着 Firefox 升级到 42.0,我遇到了一些奇怪的行为..

我正在像这样调用 FB.init 方法:

FB.init({ 
        appId: '{$appid}',
        status: true, 
        cookie: true,
        xfbml: true,
        oauth: true
    });

但在 Firefox 中它被阻止,我收到警告:

https://connect.facebook.net/en_US/all.js”的资源已被阻止,因为启用了跟踪保护。

这是默认行为,我没有设置任何额外的安全性或其他任何东西..

怎么办?

编辑 - 在帮助和谷歌搜索之后,这是一个更大的问题:

事实证明 Firefox 的 Do Not Track 和 跟踪保护 是两个不同的东西:

不跟踪在首选项/选项>隐私>“告诉网站我不想被跟踪”中启用。启用会发送 DNT 标头,但不会阻止任何请求。

跟踪保护在 about:config > privacy.trackingprotection.enabled 中启用。启用不会发送 DNT 标头,但会根据 Disconnect 的阻止列表阻止请求。所以检测 2 并不像检查 navigator.doNotTrack 那样容易,因为该属性只设置为 1。

解决方案(暂时) - 尝试做 FB.init,如果错误做一些警报..

try {
        FB.init({ 
            appId: '{$appid}',
            status: true, 
            cookie: true,
            xfbml: true,
            oauth: true
        });
    }catch(err) {
        alert('Some info for the user...');
    }

谁有更好的解决方案?

【问题讨论】:

  • 这是否发生在 Private Browsing window 中?
  • 在我的 Firefox 42.0 上它可以工作。这可能是您的问题之一......
  • 您好,您是如何解决这个问题的?我的意思是,解决方案不能只是进入 about:config 因为系统的用户不会这样做......
  • 嗨,它基于客户端设置..

标签: javascript facebook firefox


【解决方案1】:

一个简单的谷歌搜索导致这个页面:https://developer.mozilla.org/en-US/Firefox/Privacy/Tracking_Protection

您应该能够在消息出现的地方或通过about:config 停用该功能。它实际上应该在默认情况下被停用 afaik。

【讨论】:

  • 谢谢.. 由于我需要 FB 方法进行登录,如何自动停用此跟踪保护?通过 javascript 而不是用户?
  • 如果可以自动停用它会很奇怪,你不觉得吗?它会使跟踪保护的全部意义变得毫无意义......因为它不应该在默认情况下被激活,但应该没有问题。
  • 好吧,我刚刚升级了 Firefox,它默认是开启的(至少对我来说是这样)。而且我敢肯定,许多用户会保持这种状态。最好用 javascript 检测到这个并给用户警告。我试过“navigator.doNotTrack”,但这不起作用,因为这是跟踪保护!仍在寻找至少检测“跟踪保护”的解决方案
  • 好吧...升级 Firefox 会保留您的设置,这并不奇怪。
  • 我也做了同样的事情,它对我有用,答案在这里stackoverflow.com/a/34243073/1641556
【解决方案2】:

从客户端,你不能。这是 Firefox 的安全策略。您可以在线程中阅读有关此问题的信息:https://bugzilla.mozilla.org/show_bug.cgi?id=1226498

【讨论】:

    【解决方案3】:

    如果有人来这篇文章寻找如何处理这个错误。我认为这个答案可能会有所帮助。

                (function (d, s, id) {
                    let js,
                        fjs = d.getElementsByTagName(s)[0];
                    if (d.getElementById(id)) {
                        return;
                    }
                    js = d.createElement(s);
    
    //here goes the error handling 
                    js.onerror = (e) => {
                        //here we can handle the error
                        //we can show the user why the page isn't loading correctly
                    }
    
                    js.id = id;
                    js.src = 'https://connect.facebook.net/en_US/sdk.js';
                    fjs.parentNode.insertBefore(js, fjs);
                })(document, 'script', 'facebook-jssdk');
    

    【讨论】:

      【解决方案4】:

      一种解决方法是在加载所有脚本资源后检查 FB 对象是否存在。这样,无论是什么原因导致脚本加载失败,我们都被覆盖:

      $(window).on("load", function() {
      
          // If Facebook SDK failed to load ... 
          if (typeof FB === "undefined") {
      
               // ... then change interface/set global variable to handle missing FB
      
          }
      
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-21
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 2011-02-06
        • 2021-06-11
        • 1970-01-01
        • 2010-12-28
        相关资源
        最近更新 更多