Skip to content

Instantly share code, notes, and snippets.

Last active March 6, 2019 20:05
What would you like to do?
Let a script loaded before Intercom wait until intercom has booted
function afterIntercom() {
if (window.intercomSettings.is_intercom_bubble_enabled && window.intercomSettings.is_intercom_twoway_enabled) {
// do something
if (window.intercomSettings) {
} else {
Object.defineProperty(window, 'intercomSettings', {
configurable: true,
enumerable: true,
get: function() {
return this._intercomSettings;
set: function(val) {
this._intercomSettings = val;
Copy link

sn3p commented Oct 31, 2016

window.intercomSettings in undefined for me, but I'm watching window.Intercom.booted.

// Wait for Intercom to boot (max 30 seconds)
const timeout = setTimeout(() => clearInterval(interval), 30000);
const interval = setInterval(() => {
  if (window.Intercom.booted) {
    // Intercom is booted!

}, 100);

Copy link

This approach is safer. At the very beginning, intercom might be undefined and ultimately break the app
if (!!window.Intercom && window.Intercom.booted)

Copy link

t-richards commented Mar 5, 2019

In the call to Object.defineProperty, the option

writeable: true,

should be eliminated. When using the correctly spelled option, writable: true, it is considered an error to have accessors and writable at the same time:

TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment