BuilderIO / partytown

Relocate resource intensive third-party scripts off of the main thread and into a web worker. 🎉
https://partytown.builder.io
MIT License
12.88k stars 427 forks source link

Facebook pixel error: Object.keys called on non-object #338

Open JasonBarnabe opened 1 year ago

JasonBarnabe commented 1 year ago

Describe the bug When enabling partytown and firing a Facebook Pixel event, the browser reports TypeError: Object.keys called on non-object. Does not occur with same code, non-partytownified.

To Reproduce Live example

Minimal code:

<script>
//<![CDATA[
!(function(w,p,f,c){c=w[p]=Object.assign(w[p]||{},{"lib":"/partytown/","resolveUrl":"function(t){const r={\"connect.facebook.net\":\"dc2ka8n9eh0b8.cloudfront.net\",\"www.google-analytics.com\":\"d3sg51zspgx44x.cloudfront.net\"};return t.hostname=r[t.hostname]||t.hostname,t}"});c[f]=(c[f]||[]).concat(["dataLayer.push","ttq.track","ttq.page","ttq.load","fbq"])})(window,'partytown','forward');/* Partytown 0.7.1 - MIT builder.io */
!function(t,e,n,i,r,o,a,d,s,c,p,l){function u(){l||(l=1,"/"==(a=(o.lib||"/~partytown/")+(o.debug?"debug/":""))[0]&&(s=e.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(d=setTimeout(w,1e4),e.addEventListener("pt0",f),r?h(1):n.serviceWorker?n.serviceWorker.register(a+(o.swPath||"partytown-sw.js"),{scope:a}).then((function(t){t.active?h():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&h()}))}),console.error):w())))}function h(t){c=e.createElement(t?"script":"iframe"),t||(c.setAttribute("style","display:block;width:0;height:0;border:0;visibility:hidden"),c.setAttribute("aria-hidden",!0)),c.src=a+"partytown-"+(t?"atomics.js?v=0.7.1":"sandbox-sw.html?"+Date.now()),e.body.appendChild(c)}function w(t,n){for(f(),t=0;t<s.length;t++)(n=e.createElement("script")).innerHTML=s[t].innerHTML,e.head.appendChild(n);c&&c.parentNode.removeChild(c)}function f(){clearTimeout(d)}o=t.partytown||{},i==t&&(o.forward||[]).map((function(e){p=t,e.split(".").map((function(e,n,i){p=p[i[n]]=n+1<i.length?"push"==i[n+1]?[]:p[i[n]]||{}:function(){(t._ptf=t._ptf||[]).push(i,arguments)}}))})),"complete"==e.readyState?u():(t.addEventListener("DOMContentLoaded",u),t.addEventListener("load",u))}(window,document,navigator,top,window.crossOriginIsolated);
//]]>
</script>
<script type="text/partytown">
  !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://dc2ka8n9eh0b8.cloudfront.net/en_US/fbevents.js'); fbq('init', '844784756754223', {});
  fbq('track', 'PageView', {}, { eventID: '844784756754223_8kblcy77c0vqi6tl' }); 
</script>

Result:

5112d82c-890e-4cff-873c-0bb4a9e77ff9:2 TypeError: Object.keys called on non-object
    at u (fbevents.js:26:77412)
    at eval (844784756754223?v=2.9.90&r=stable:29:77128)
    at eval (844784756754223?v=2.9.90&r=stable:29:78361)
    at Object.eval [as SignalsFBevents.plugins.automaticmatchingforpartnerintegrations] (844784756754223?v=2.9.90&r=stable:29:78381)
    at f.__fbeventsModules.f.getFbeventsModules (fbevents.js:26:2594)
    at eval (844784756754223?v=2.9.90&r=stable:29:78405)
    at eval (844784756754223?v=2.9.90&r=stable:29:78711)
    at Proxy.eval (844784756754223?v=2.9.90&r=stable:29:78715)
    at Me (5112d82c-890e-4cff-873c-0bb4a9e77ff9:2:7941)
    at 5112d82c-890e-4cff-873c-0bb4a9e77ff9:2:20233

Non-partytown code, without an error:

<script>
  !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'); fbq('init', '844784756754223', {});
  fbq('track', 'PageView', {}, { eventID: '844784756754223_8kblcy77c0vqi6tl' }); 
</script>

Partytown version 0.7.1

JasonBarnabe commented 1 year ago

I've upgraded the live example to 0.7.3 and the exception still happens.