useScript() · Nuxt Scripts
This composable is a wrapper around the Unhead useScript() with extra Nuxt goodies on top, for
full documentation please refer to this.
Signature
export function useScript<T extends Record<string | symbol, any>>(input: UseScriptInput, options?: NuxtUseScriptOptions): T & { $script: Promise<T> & VueScriptInstance<T> } {}
Arguments
UseScriptInput
This is the script tag input. For example, you can pass a URL string or an object with the script tag attributes.
export type UseScriptInput = string | {
src?: string
async?: boolean
defer?: boolean
type?: string
integrity?: string
crossorigin?: string
text?: string
innerHTML?: string
innerText?: string
content?: string
referrerPolicy?: string
attributes?: Record<string, string>
}
See the Script Input documentation for more information on the options.
NuxtUseScriptOptions
See the Script Options documentation for more information on the options.
use- The function to resolve the script.trigger- Triggering Script Loadingbundle- Bundling Remote Scripts for more information.
export type NuxtUseScriptOptions<T = any> = Omit<UseScriptOptions<T>, 'trigger'> & {
/**
* The trigger to load the script:
* - `onNuxtReady` - Load the script when Nuxt is ready.
* - `manual` - Load the script manually by calling `load()`
* - `Promise` - Load the script when the promise resolves.
*/
trigger?: UseScriptOptions<T>['trigger'] | 'onNuxtReady'
/**
* Should the script be bundled as an asset and loaded from your server. This is useful for improving the
* performance by avoiding the extra DNS lookup and reducing the number of requests. It also
* improves privacy by not sharing the user's IP address with third-party servers.
* - `true` - Bundle the script as an asset.
* - `false` - Do not bundle the script. (default)
*/
bundle?: boolean
/**
* [Experimental] Load the script in a web worker using Partytown.
* When enabled, adds `type="text/partytown"` to the script tag.
* Requires @nuxtjs/partytown to be installed and configured separately.
* Note: Scripts requiring DOM access (GTM, Hotjar, chat widgets) are not compatible.
* @see https://partytown.qwik.dev/
*/
partytown?: boolean
/**
* Skip any schema validation for the script input. This is useful for loading the script stubs for development without
* loading the actual script and not getting warnings.
*/
skipValidation?: boolean
}
Return
See the Understanding proxied functions and $script documentation for more information on the return.
The returned object includes:
status- Reactive ref with the script status:'awaitingLoad'|'loading'|'loaded'|'error'load()- Function to manually load the scriptremove()- Function to remove the script from the DOMreload()- Function to remove and reload the script (see below)
reload()
Removes the script and reloads it, forcing re-execution. Useful for third-party scripts that scan the DOM once on load and need to re-run after SPA navigation.
const { reload } = useScript('https://example.com/dom-scanner.js')
// Reload when navigating
watch(() => route.path, () => reload())
Many third-party scripts have their own SPA support (e.g., _iub.cs.api.activateSnippets() for iubenda). Check the script's documentation before using reload() - their built-in methods are usually more efficient.