---
title: "Asset.script ViewHelper <f:asset.script>"
manual: "Fluid ViewHelper Reference"
version: "main"
permalink: "https://docs.typo3.org/permalink/t3viewhelper:typo3-fluid-asset-script@main"
source: "Global/Asset/Script.rst"
modified: "2026-09-17T05:12:06+00:00"
---

# Asset.script ViewHelper `<f:asset.script>`

ViewHelper to add JavaScript to the TYPO3 AssetCollector. Either a file or inline JavaScript can be added.

Go to the source code of this ViewHelper: [Asset\\ScriptViewHelper.php (GitHub)](https://github.com/TYPO3/typo3/blob/main/typo3/sysext/fluid/Classes/ViewHelpers/Asset/ScriptViewHelper.php).

**Table of contents**

-   [Examples](https://docs.typo3.org/permalink/t3viewhelper:examples@main)
-   [Details](https://docs.typo3.org/permalink/t3viewhelper:details@main)
-   [Arguments of the <f:asset.script> ViewHelper](https://docs.typo3.org/permalink/t3viewhelper:arguments-of-the-f-asset-script-viewhelper@main)

## Examples

**packages/my_sitepackage/Resources/Private/Templates/Page/Default.fluid.html**

```html
<f:asset.script identifier="identifier123" src="EXT:my_ext/Resources/Public/JavaScript/foo.js" />
<f:asset.script identifier="identifier987">
  alert('hello world');
</f:asset.script>
```

## Details

In the AssetCollector, the "identifier" attribute is used as a unique identifier. Thus, if assets are added multiple
times using the same identifier, the asset will only be served once (the last added overrides previous assets).

Some available attributes are defaults but do not make sense for this ViewHelper. Relevant attributes specific
for this ViewHelper are: async, crossorigin, defer, integrity, nomodule, nonce, referrerpolicy, src, type.

Using the "inline" argument, the file content of the referenced file is added as inline script.

## Arguments of the `<f:asset.script>` ViewHelper

> **Allows arbitrary arguments**
>
> This ViewHelper allows you to pass arbitrary arguments not defined below
> directly to the HTML tag created. This includes custom `data-` arguments.

-   **additionalAttributes**

    -   *Type:* array

    Additional tag attributes. They will be added directly to the resulting HTML tag.

-   **aria**

    -   *Type:* array

    Additional aria-\* attributes. They will each be added with a "aria-" prefix.

-   **async**

    -   *Type:* bool

    Define that the script will be fetched in parallel to parsing and evaluation.

-   **csp**

    -   *Type:* bool

    Whether to collect a CSP hash value for this asset (default: true for external files, false for inline)

-   **data**

    -   *Type:* array

    Additional data-\* attributes. They will each be added with a "data-" prefix.

-   **defer**

    -   *Type:* bool

    Define that the script is meant to be executed after the document has been parsed.

-   **identifier**

    -   *Type:* string
    -   *Required:* true

    Use this identifier within templates to only inject your JS once, even though it is added multiple times.

-   **inline**

    -   *Type:* bool
    -   *Default:* false

    Define whether or not the referenced file should be loaded as inline script (Only to be used if 'src' is set).

-   **nomodule**

    -   *Type:* bool

    Define that the script should not be executed in browsers that support ES2015 modules.

-   **priority**

    -   *Type:* boolean
    -   *Default:* false

    Define whether the JavaScript should be put in the \<head> tag above-the-fold or somewhere in the body part.

-   **src**

    -   *Type:* string

    The URI of the script to be loaded. If omitted, the tag children are added as inline JavaScript.
