Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.wearo.io/llms.txt

Use this file to discover all available pages before exploring further.

Async loading patterns

When to use the queue pattern

Use it when:
  • You add async or defer to the <script> tag
  • The script is in <head> but init() is called in <body>
  • You’re loading via Google Tag Manager (GTM defers execution by default)
If both the <script src="..."> and TryOnWidget.init() are at the end of </body> without async/defer, you don’t need this pattern.

The queue pattern

<!-- Initialize the queue BEFORE the script loads -->
<script>
  window.TryOnWidgetQueue = window.TryOnWidgetQueue || [];
  window.TryOnWidgetQueue.push({
    method: 'init',
    config: {
      apiKey: 'wearo_xxxxxxxxxxxxxxxxxxxx',
      productSelector: 'img[data-product-image]'
    }
  });
</script>

<!-- Load the script asynchronously -->
<script src="https://wearo.io/widget/tryon-widget.js" async></script>
The loader automatically drains the queue at boot — init() will be called exactly once, regardless of load order.

GTM Custom HTML tag

In GTM, use the queue pattern so the config is ready before the script executes:
<script src="https://wearo.io/widget/tryon-widget.js" async></script>
<script>
  window.TryOnWidgetQueue = window.TryOnWidgetQueue || [];
  window.TryOnWidgetQueue.push({
    method: 'init',
    config: {
      apiKey: 'wearo_xxxxxxxxxxxxxxxxxxxx',
      productSelector: '.product__media img',
      brandColor: '#000000'
    }
  });
</script>
No other changes needed — the widget API is identical whether loaded via GTM or a direct script tag.