Loading Facebook pixel async

后端 未结 1 1258
甜味超标
甜味超标 2021-01-29 02:02

I\'m loading the Facebook pixel and getting an error because the script isn\'t loaded when the call is made. This is what it looks like:

function Load3rdPartyScr         


        
相关标签:
1条回答
  • 2021-01-29 02:27

    I tried to reproduce this problem but in vain. Your code works perfectly. fbq is appended syncronously (So no need to timeout) to window and will be called normally. Check yourself:

    (function Load3rdPartyScripts() {
    
        (function (f, b, e, v, n, t, s) {
            if (f.fbq) return; n = f.fbq = function () {
                n.callMethod ?
                n.callMethod.apply(n, arguments) : n.queue.push(arguments)
            }; if (!f._fbq) f._fbq = n;
            n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0;
            t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s)
        })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js', undefined, undefined, undefined);
    
        fbq('init', 'XXXXXXXXXXXXX'); // No problem here!
        fbq('track', 'PageView');
    
    })();

    But

    There are some potential reasons that may produce your error:

    1. Running the script outside the browser, An env that ruined the window variable.

    2. Running code on browser but with a freezed window (Object.freeze(window)) causes that fbq will be undefined

    3. So also Object.seal(window) like freeze(). It will prevent new properties from being added to window

    4. Creating a local scope named window variable will cause fbq to be undefined

      function Load3rdPartyScripts() {
          let window = {};  // Notice!
          (function (f, b, e, v, n, t, s) {
              if (f.fbq) return; n = f.fbq = function () {
                  n.callMethod ?
                  n.callMethod.apply(n, arguments) : n.queue.push(arguments)
              }; if (!f._fbq) f._fbq = n;
              n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0;
              t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s)
          })(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js', undefined, undefined, undefined);
      
          fbq('init', 'XXXXXXXXXXXXX'); //problem here
          fbq('track', 'PageView');
      
      }
      Load3rdPartyScripts();
      
    0 讨论(0)
提交回复
热议问题