Intégration Ionic / Capacitor
Utilisez le custom element <ekoo-widget> dans vos applications Ionic (React, Vue, Angular)
data-ekooReqdata-ekoo-product-idReqdata-ekoo-localeautodata-ekoo-variantdata-ekoo-review-iddata-ekoo-on-eventdata-ekoo-directionnormaldata-ekoo-scale1data-ekoo-animationpulsedata-ekoo-animation-durationcontinuousdata-ekoo-always-openfalsedata-ekoo-show-imagetruedata-ekoo-not-fully-clickablefalsedata-ekoo-autoplayfalsedata-ekoo-show-transcriptfalsedata-ekoo-show-speed-buttonfalsedata-ekoo-closed-state-main-textdata-ekoo-closed-state-secondary-textdata-ekoo-modeautodata-shadow-modeopenwindow.EKOO_FORCE_SPA = truewindow.ekooShadowMode = "open"Principe
Dans un contexte Ionic / Capacitor, le widget Ekoo s'utilise via le custom element <ekoo-widget>. Le script est chargé une seule fois dans index.html et le cycle de vie est géré via les hooks Ionic de chaque framework.
ekooLoad()— à appeler quand la vue contenant le widget apparaît.ekooUnload()— à appeler quand la vue disparaît.ekooReload()— pour forcer un rafraîchissement complet du widget.
1. Charger le script dans index.html
Ajoutez le script Ekoo dans le <head> de votre index.html. Il sera chargé une seule fois au démarrage de l'application.
1<head>2 <meta charset="UTF-8" />3 <title>My App</title>4 <script src="https://app.ekoo.co/widgets/widget-4.0.0-standalone.js"</script>5</head>2. Utiliser le custom element
Placez le custom element <ekoo-widget> dans votre template avec les attributs suivants :
1<ekoo-widget2 data-ekoo="YOUR_WEBSITE_ID"3 data-ekoo-product-id="MY_PRODUCT_ID"4 data-ekoo-locale="fr"5 data-shadow-mode="open"6></ekoo-widget>Note
Depuis le widget 4.0.0, le mode Shadow DOM "open" est la valeur par défaut, ce qui assure le bon fonctionnement du widget en tant que Web Component dans le contexte Ionic. L'attribut data-shadow-mode peut donc être omis.
Attributs clés
| Attribut | Statut | Description |
|---|---|---|
data-ekoo | Obligatoire | Votre identifiant unique de site web Ekoo. |
data-product-id | Obligatoire | L'ID du produit correspondant à votre catalogue Ekoo. |
data-ekoo-variant | Optionnel | Référence d'une configuration widget enregistrée dans le backoffice (ex : "homepage"). Sélectionne l'habillage appliqué ; le produit, ses audios et ses reviewers proviennent toujours de data-ekoo-product-id. |
data-shadow-mode | Optionnel | "open" est désormais la valeur par défaut (widget 4.0.0). À définir à "closed" uniquement si vous avez besoin d'une isolation complète des styles. |
4. Product ID dynamique
Le custom element <ekoo-widget> observe les changements d'attributs. Pour mettre à jour le product ID dynamiquement, utilisez setAttribute:
1const widget = document.querySelector('ekoo-widget')2if (widget) {3 widget.setAttribute('data-ekoo-product-id', newProductId)4}ekooReload() après changements multiples
Si vous constatez des incohérences visuelles après plusieurs changements de produit, appelez window.ekooReload() pour forcer une réinitialisation complète du widget.
5. Ionic React
1import React from 'react'2import {3 IonContent,4 IonPage,5 useIonViewDidEnter,6 useIonViewWillLeave,7} from '@ionic/react'89interface ProductPageProps {10 productId: string11}1213const ProductPage: React.FC<ProductPageProps> = ({ productId }) => {14 useIonViewDidEnter(() => {15 window.ekooLoad?.()16 })1718 useIonViewWillLeave(() => {19 window.ekooUnload?.()20 })2122 return (23 <IonPage>24 <IonContent>25 <h1>My product</h1>26 {/* @ts-expect-error — custom element not typed by default */}27 <ekoo-widget28 data-ekoo="YOUR_WEBSITE_ID"29 data-ekoo-product-id={productId}30 data-ekoo-locale="fr"31 data-shadow-mode="open"32 />33 </IonContent>34 </IonPage>35 )36}3738export default ProductPage6. Ionic Vue
1<template>2 <ion-page>3 <ion-content>4 <h1>My product</h1>5 <ekoo-widget6 data-ekoo="YOUR_WEBSITE_ID"7 :data-ekoo-product-id="productId"8 data-ekoo-locale="fr"9 data-shadow-mode="open"10 />11 </ion-content>12 </ion-page>13</template>1415<script setup lang="ts">16import { IonPage, IonContent, onIonViewDidEnter, onIonViewWillLeave } from '@ionic/vue'1718defineProps<{19 productId: string20}>()2122onIonViewDidEnter(() => {23 window.ekooLoad?.()24})2526onIonViewWillLeave(() => {27 window.ekooUnload?.()28})29</script>Vue : déclarer le custom element
Pour éviter les warnings Vue concernant le custom element, ajoutez ekoo-widget dans la configuration compilerOptions.isCustomElement de votre vite.config.ts.
7. Ionic Angular
Pour Angular, vous devez ajouter CUSTOM_ELEMENTS_SCHEMA au module ou composant qui utilise le custom element :
1import { Component } from '@angular/core'2import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'3import { ViewDidEnter, ViewWillLeave } from '@ionic/angular'45@Component({6 selector: 'app-product',7 schemas: [CUSTOM_ELEMENTS_SCHEMA],8 template: `9 <ion-content>10 <h1>My product</h1>11 <ekoo-widget12 data-ekoo="YOUR_WEBSITE_ID"13 [attr.data-ekoo-product-id]="productId"14 data-ekoo-locale="fr"15 data-shadow-mode="open"16 ></ekoo-widget>17 </ion-content>18 `,19})20export class ProductPage implements ViewDidEnter, ViewWillLeave {21 productId = 'my-product-123'2223 ionViewDidEnter() {24 (window as any).ekooLoad?.()25 }2627 ionViewWillLeave() {28 (window as any).ekooUnload?.()29 }30}CUSTOM_ELEMENTS_SCHEMA
Sans CUSTOM_ELEMENTS_SCHEMA, Angular affichera une erreur car il ne reconnaît pas <ekoo-widget> comme un composant Angular natif.
Résumé du cycle de vie
- Vue entre (visible) →
ekooLoad() - Vue quitte (masquée) →
ekooUnload() - Product ID change → mettre à jour l'attribut avec
setAttribute - Incohérence visuelle →
ekooReload()