---
title: "Known problems and how to solve"
manual: "Look - real frontend previews in the TYPO3 page module"
version: "1.0"
permalink: "https://docs.typo3.org/permalink/flowd/typo3-look:known-problems@1.0"
source: "KnownProblems/Index.rst"
rendered: "2026-09-17T13:04:18+00:00"
---

# Known problems and how to solve {#known-problems-and-how-to-solve}

Most problems come from the isolation of the preview frame. The frame has an
*opaque origin*, which changes how browsers treat a few frontend techniques.
This chapter lists the symptoms and the fixes.

-   [Assets from other hosts do not load](https://docs.typo3.org/permalink/flowd/typo3-look:assets-from-other-hosts-do-not-load@1.0)
-   [Fonts or scripts do not load](https://docs.typo3.org/permalink/flowd/typo3-look:fonts-or-scripts-do-not-load@1.0)
-   [SVG icons are missing](https://docs.typo3.org/permalink/flowd/typo3-look:svg-icons-are-missing@1.0)
-   [The preview appears three times](https://docs.typo3.org/permalink/flowd/typo3-look:the-preview-appears-three-times@1.0)
-   [Images are missing, "File ... does not exist"](https://docs.typo3.org/permalink/flowd/typo3-look:images-are-missing-file-does-not-exist@1.0)
-   [A red callout instead of the preview](https://docs.typo3.org/permalink/flowd/typo3-look:a-red-callout-instead-of-the-preview@1.0)
-   [Nothing works in the standalone Install Tool](https://docs.typo3.org/permalink/flowd/typo3-look:nothing-works-in-the-standalone-install-tool@1.0)

## Assets from other hosts do not load {#assets-from-other-hosts-do-not-load}

**Symptom:** web fonts from Google Fonts, a library from a CDN or images from
an external server are missing in the preview, while they work on the
website. The console reports a Content Security Policy violation, not a
CORS error.

**Cause:** the preview document inherits the Content Security Policy of the
TYPO3 backend, which by default only allows assets from the backend's own
host. Adding a CORS header does not help here, the browser refuses the
request before it is sent.

**Fix:** serve the assets from your own host, or extend the backend policy
for the hosts you trust with a `Configuration/ContentSecurityPolicies.php`
in your site package:

**EXT:my_site/Configuration/ContentSecurityPolicies.php**

```php
<?php

use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Directive;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Mutation;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationCollection;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\MutationMode;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\Scope;
use TYPO3\CMS\Core\Security\ContentSecurityPolicy\UriValue;
use TYPO3\CMS\Core\Type\Map;

return Map::fromEntries([
    Scope::backend(),
    new MutationCollection(
        new Mutation(MutationMode::Extend, Directive::FontSrc, new UriValue('https://fonts.gstatic.com')),
        new Mutation(MutationMode::Extend, Directive::StyleSrc, new UriValue('https://fonts.googleapis.com')),
    ),
]);
```

See the [Content Security Policy chapter](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/ContentSecurityPolicy/Index.html)
of the core API reference for the details.

## Fonts or scripts do not load {#fonts-or-scripts-do-not-load}

**Symptom:** the preview uses fallback fonts, or with
[allowSiteScripts](https://docs.typo3.org/permalink/flowd/typo3-look:confval-flag-allow-site-scripts@1.0) the site scripts do not
run. The browser console inside the frame reports a CORS error.

**Cause:** web fonts and JavaScript modules are loaded as cross-origin
requests from the frame. The web server does not send
`Access-Control-Allow-Origin: *` for them. Look's own script is not
affected, it is a classic script.

**Fix:** add the header for the path your frontend build lives in, see
[If your frontend uses web fonts](https://docs.typo3.org/permalink/flowd/typo3-look:installation-webserver@1.0).

## SVG icons are missing {#svg-icons-are-missing}

**Symptom:** icons referenced as an external SVG sprite are blank. The console
says "Unsafe attempt to load URL ... from frame with URL about:srcdoc".

**Cause:** `<svg><use href="/icons.svg#play">` may only load files from
the same origin, and the frame has none.

**Fix:** inline the SVG when rendering for the preview. A small view helper
that reads the icon file and returns its markup does the job. Detect the
preview context in your templates, for example with a flag your preview
template sets, and switch between the sprite reference (frontend) and the
inline markup (preview):

```html
<f:if condition="{isBackendPreview}">
    <f:then>{my:svg.inline(path: 'EXT:my_site/Resources/Public/Icons/{name}.svg', class: 'icon')}</f:then>
    <f:else>
        <svg class="icon"><use href="{f:uri.resource(path: 'EXT:my_site/Resources/Public/Icons/{name}.svg')}#icon"></use></svg>
    </f:else>
</f:if>
```

Icons that are inlined in the frontend anyway need no change.

## The preview appears three times {#the-preview-appears-three-times}

**Symptom:** with Content Blocks, the whole preview is repeated three times.

**Cause:** Content Blocks renders `backend-preview.html` for the header,
the content and the footer of the element.

**Fix:** use the `Preview` layout with a `Content` section, see
[Previews for Content Blocks](https://docs.typo3.org/permalink/flowd/typo3-look:usage-content-blocks@1.0).

## Images are missing, "File ... does not exist" {#images-are-missing-file-does-not-exist}

**Symptom:** the preview shows broken images or an error about a processed
file that does not exist.

**Cause:** backend requests defer image processing to a later request. A
frontend template that expects the processed file immediately (for example a
custom picture renderer) does not get it.

**Fix:** set the `fileProcessing` aspect of the TYPO3 context to
non-deferred (`new FileProcessingAspect(false)`) while rendering the
preview, in the same wrapper that handles the visibility aspect.

## A red callout instead of the preview {#a-red-callout-instead-of-the-preview}

**Symptom:** the page module shows "Preview could not be rendered" with an
error message and a code.

**Cause:** rendering the frontend markup threw an exception.

**Fix:** in development context (or with backend debugging enabled) the
callout names the problem, usually a missing partial, a wrong argument or a
PHP error in a view helper; in production it shows only the error code and
the details go to the TYPO3 log. Correct the template and reload the page
module.

## Nothing works in the standalone Install Tool {#nothing-works-in-the-standalone-install-tool}

The previews need the nonce of a backend request. The standalone Install Tool
(`/typo3/install.php`) has none and does not render page module
previews, which is expected.
