Widget
トラブルシューティング
CSP / Shadow DOM / SSR など CarePort Widget のよくある問題と解決策
ウィジェットが表示されない
まず以下を確認してください。
data-key属性が設定されているか(cp_live_/cp_test_で始まる値)。data-keyが無いと自動初期化されません。- ブラウザのコンソールに
[CarePort] API key is requiredが出ていないか - スクリプトの URL が
https://cdn.careport.app/v1/widget.jsになっているか - 広告ブロッカーがスクリプトを止めていないか
CSP(Content Security Policy)
サイトに CSP を設定している場合、CarePort のドメインを許可する必要があります。
Content-Security-Policy:
script-src 'self' https://cdn.careport.app;
connect-src 'self' https://api.careport.app https://*.supabase.co;script-src— ウィジェット本体(cdn.careport.app)の読み込みを許可connect-src— チャット API(api.careport.app)および Supabase への接続を許可
補足: ウィジェットはスタイルを Shadow DOM 内に注入します。
style-srcを厳格に制限している場合はstyle-src 'unsafe-inline'の許可、または CarePort サポートへの相談が必要になることがあります。
スタイルが崩れる / サイトの CSS と干渉する
CarePort Widget は Shadow DOM (closed) でレンダリングされるため、原則としてホストページの CSS と相互に干渉しません。
- ホストページの CSS がウィジェット内部に漏れることはありません
- ウィジェットの CSS がホストページに漏れることもありません
もし表示位置が他の固定要素と重なる場合は、data-z-index で重なり順を調整してください。
SSR(Next.js など)でエラーになる
window is not defined などのエラーが出る場合、<script> をサーバーサイドで直接実行しようとしています。
- Next.js では必ず
next/scriptを使ってください(strategy="afterInteractive") window.CarePortにアクセスするコードはuseEffect内、またはnext/scriptのonLoad内に書いてください
<Script
src="https://cdn.careport.app/v1/widget.js"
strategy="afterInteractive"
data-key="cp_live_xxxx"
onLoad={() => {
// ここでは window.CarePort が利用可能
window.CarePort?.getInstance()?.on('ready', () => {});
}}
/>React で開発時にウィジェットが 2 つ表示される
React 18 の Strict Mode では useEffect が開発時に 2 回実行されます。cleanup 関数で destroy() を呼んでいるか確認してください。
useEffect(() => {
// ... スクリプト追加
return () => {
window.CarePort?.getInstance()?.destroy();
};
}, []);解決しない場合
上記で解決しない場合は、ブラウザのコンソールログ([CarePort] プレフィックス)を添えて CarePort サポートまでお問い合わせください。