Troubleshooting
Check if Javascript tag is loaded correctly
Open the developer console and call the following Screeb command: $screeb('debug');.
You will get contextual information about the running user session:

Error cases
- The error
Uncaught ReferenceError: $screeb is not definedmeans the Javascript Tag was not injected into the page. - An empty channel id means you didn't call the
$screeb('init', ...)command. - An empty respondent id means you exceeded your respondent quota.
Debug targeting rules
Since the targeting engine built by Screeb runs in the background, you may not understand which rules prevent your survey from being displayed to a user.
Open the developer console and call the following Screeb command: $screeb('targeting.debug');.
You will get a list of available surveys and the associated targeting rules:

The rules with a green dot 🟢 are the ones that have been validated for this user. The rules with a red dot 🔴 are not validated and may be the reason why your survey is not displayed.
Debug message conditions
Since the targeting engine built by Screeb runs in the background, you may not understand which rules prevent your message from being displayed to a user.
Open the developer console and call the following Screeb command: $screeb('message.debug');.
You will get a list of active messages and the associated conditions:
⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼ SCREEB MESSAGE DEBUG ⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
Active message(s) [1]:
● <message-id>:
https://admin.screeb.app/org/<org-id>/survey/<message-id>/share
Type: "message"
Status: ACTIVE BUT NOT DISPLAYED 🟠
Conditions [2]:
🟢 Multiple displays: PASS
🔴 Time on page: FAIL - condition not met
⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼⎼
The rules with a green dot 🟢 are the ones that have been validated for this user. The rules with a red dot 🔴 are not validated and may be the reason why your message is not displayed.
Possible message statuses:
| Status | Meaning |
|---|---|
DISPLAYED 🟢 | The message is currently visible to the user. |
ACTIVE BUT NOT DISPLAYED 🟠 | The message is active but display conditions are not yet met. |
IN PROGRESS 🟡 | The message is being loaded. |
ENDED 🟣 | The user completed the message. |
CLOSED 🔴 | The user dismissed the message. |
INTERRUPTED ⚪️ | The message was interrupted before completion. |
Surveys or messages disappear after a page navigation (SPA / Turbo)
Some Single Page App frameworks (e.g. Hotwire Turbo, Symfony UX Turbo) replace the whole <body> element on each navigation. Since Screeb appends its tag to the <body> by default, this detaches it and surveys, messages or widgets may disappear or stop working after a page change.
Set the root-container init option to an element that survives those swaps — the <html> element, or any container your framework keeps in place (such as a data-turbo-permanent node):
$screeb("init", "<website-id>", { "root-container": "html" });
Content Security Policy (CSP)
Screeb runs under a strict CSP — no 'unsafe-eval', and no 'unsafe-inline'
at all when you install it with a single script tag carrying
data-channel-id
instead of the inline snippet. A policy that allows every Screeb feature looks
like this:
default-src 'self';
script-src 'self' https://*.screeb.app;
connect-src 'self' https://*.screeb.app wss://*.screeb.app https://*.s3.fr-par.scw.cloud;
style-src 'self' https://*.screeb.app;
img-src 'self' data: blob: https://*.screeb.app;
font-src 'self' https://*.screeb.app;
media-src 'self' blob: https://*.screeb.app;
frame-src 'self';
Add your own domains alongside 'self'.
See CSP, iframes and security requirements for what each directive controls, which features degrade when one is missing, and the requirements that apply when your page is itself embedded in an iframe.