Home Getting started Widget Troubleshooting Guide

Widget Troubleshooting Guide

Last updated on Feb 05, 2026

Uncaught Error: Widget didn't find LoaderObject for instance premagic.

The loading script was either modified, no call to 'init' method was done

or there is conflicting object defined in `window.premagic`.

What This Means

This error occurs when the Premagic widget's main script loads but cannot find the expected loader setup on the page. The widget uses a two-part loading system:

  1. Part 1: A small inline script that creates a queue for early calls

  2. Part 2: The main widget script that processes the queue and initializes

When Part 2 loads but can't find Part 1's setup, this error is thrown.


Troubleshooting Steps

Step 1: Verify the Complete Embed Code

The widget requires both scripts to be present on the page:

✅ Correct Implementation


<!-- Part 1: Inline loader script (must come first) -->

<script>

  (function(w, d, s, o, f, js, fjs) {

    w[o] = w[o] || function() { (w[o].q = w[o].q || []).push(arguments); };

    (js = d.createElement(s)), (fjs = d.getElementsByTagName(s)[0]);

    js.id = o; js.src = f; js.async = 1; fjs.parentNode.insertBefore(js, fjs);

  })(window, document, 'script', 'premagic', 'https://your-cdn.com/premagic-poster-widget.js');

\
  premagic('init', {

    eventId: 'YOUR_EVENT_ID',

    // ... other config

  });

</script>

<!-- Part 2: Main widget container -->

<div id="widget-premagic"></div>

❌ Common Mistake: Only Main Script


<!-- Missing the inline loader! -->

<script src="https://your-cdn.com/premagic-poster-widget.js"></script>

<div id="widget-premagic"></div>

Solution: Ensure the customer is using the complete embed code provided in their account dashboard.


Step 2: Check for Missing 'init' Call

The widget must have at least one init call before or immediately after the script loads.

✅ Correct: Init Call Present


<script>

  // ... loader code ...

  premagic('init', {

    eventId: 'abc123',

    projectId: 'xyz789'

  });

</script>

❌ Incorrect: No Init Call


<script>

  // ... loader code ...

  // Missing: premagic('init', {...});

</script>

Solution: Add the init call with proper configuration.


Step 3: Check for Naming Conflicts

Another script on the page might be using window.premagic for something else.

Diagnostic Command

Ask the customer to open their browser console and run:


console.log(window.premagic);

console.log(window.premagic?.q);

Expected Output


// Before widget loads:

function() { ... }  // Queue function

[['init', {...}]]   // Array with init call

// After widget loads:

function(method, ...args) { ... }  // Real widget function

Problem Output


// If something else defined it:

{ someOtherProperty: 'value' }  // Wrong type!

undefined  // .q doesn't exist

Solution:

  • Remove conflicting scripts

  • Use a custom instance name if needed (advanced)


Step 4: Check for Script Blocking

The inline script might be blocked by:

1. Ad Blockers

  • Ask customer to disable ad blockers temporarily

  • Check if script loads with ad blocker off

2. Content Security Policy (CSP)

  • Check browser console for CSP errors

  • Verify script-src allows inline scripts

  • Required CSP directives:

    
    script-src 'unsafe-inline' 'self' https://your-cdn.com;
    
    

3. Browser Extensions

  • Try in incognito/private mode

  • Disable browser extensions one by one

Solution: Update CSP headers or whitelist the widget domain.


Step 5: Verify Load Order

The scripts must load in this order:

  1. ✅ Inline loader script

  2. premagic('init', ...) call

  3. ✅ Main widget script loads (async)

  4. ✅ Widget initializes

Common Load Order Issues

Init called after main script loads:


<script src="widget.js" async></script>

<!-- Later in page -->

<script>

  premagic('init', {...});  // Might be too late!

</script>

Correct: Init in same block as loader:


<script>

  // Loader code

  premagic('init', {...});  // Queued before main script loads

</script>

<script src="widget.js" async></script>

Quick Diagnostic Checklist

Send this checklist to customers:

  • [ ] Both inline loader AND main script are present

  • [ ] premagic('init', {...}) is called with valid config

  • [ ] No ad blockers are running

  • [ ] No CSP errors in browser console

  • [ ] No other scripts use window.premagic

  • [ ] Widget container exists: <div id="widget-premagic"></div>

  • [ ] Tested in incognito mode (no extensions)


Advanced Solutions

Using Custom Instance Names

If there's a naming conflict, customers can use a custom instance name:


<script>

  (function(w, d, s, o, f, js, fjs) {

    w[o] = w[o] || function() { (w[o].q = w[o].q || []).push(arguments); };

    // ... loader code ...

  })(window, document, 'script', 'myCustomWidget', 'https://...');

\
  myCustomWidget('init', {...});  // Use custom name

</script>

Debugging with Console


// Check if loader is set up

console.log('Loader exists:', typeof window.premagic === 'function');

console.log('Queue exists:', Array.isArray(window.premagic?.q));

console.log('Queue contents:', window.premagic?.q);

// Check if widget loaded

console.log('Widget loaded:', window['loaded-premagic']);

Common Questions

Q: Can we load the script dynamically via JavaScript?

A: Yes, but ensure the loader is created first:


// Create loader first

window.premagic = window.premagic || function() {

  (window.premagic.q = window.premagic.q || []).push(arguments);

};

// Call init

premagic('init', { eventId: 'abc123' });

// Load main script

const script = document.createElement('script');

script.src = 'https://your-cdn.com/premagic-poster-widget.js';

script.async = true;

document.head.appendChild(script);

Q: Can we use multiple widgets on the same page?

A: Yes, use different instance names for each widget (see Advanced Solutions above).

Q: Does this work with React/Vue/Angular?

A: Yes, but ensure the loader script runs before component mount. Use useEffect (React) or lifecycle hooks to initialize.


Getting More Help

If none of these solutions work:

  1. Check browser console for additional error messages

  2. Capture network tab showing script loading

  3. Share the page URL (or HTML source) for debugging

  4. Contact support with:

    • Browser/OS version

    • Console error screenshot

    • Network tab screenshot

    • Embed code being used