window.open and target="_blank" are both blocked. useOpenExternal sends the user out to a URL by routing the navigation through the host.
Example
The product card sends the shopper to the merchant’s product page when they tap “View details”; the host opens it in the user’s browser.views/carousel.tsx
Returns
useOpenExternal takes no arguments and returns a single function.
openExternal
void: a fire-and-forget side effect, nothing crosses back to the view or the model.
href(required) The URL to open outside the iframe. The host opens it in the user’s browser or hands it to the native app.optionsOptional. Its only field,redirectUrl, is read on ChatGPT only: for allowlisted targets ChatGPT appends a?redirectUrl=…parameter (a link back into the conversation) by default, andredirectUrl: falseskips it. On Claude it is ignored with a warning.
openExternal can send the user to without the host’s safe-link confirmation modal are declared in the view’s redirectDomains. The view passes that list to the host, which honors it. See Configure CSP.
Create Views
Open the sandbox to external domains from a view
Configure CSP
Allowlist redirect targets with
redirectDomainsuseSendFollowUpMessage
Send a message back into the conversation