Plattformsguider 28 mars 2026

Så lägger du till en videobubbla i React eller Vue

Så lägger du till och testar en videobubbla i React eller Vue och hanterar klientladdning, rutter, mobilvisning, tillgänglighet och prestanda.

Så lägger du till en videobubbla i React eller Vue

Kort sammanfattning

  • När du har hämtat integrationskoden från CompleteGreet kan installationen i React eller Vue vara enkel. Tidsåtgången beror på ramverk, arkitektur och testning.
  • Tillgängliga inställningar kan styra när bubblan visas och på vilka rutter den visas. Kontrollera funktionerna i den aktuella lösningen.
  • Testa alltid videobubblan på riktiga enheter. Verktyg som bara ändrar storleken på webbläsarfönstret fångar inte upp allt.

Hur installerar du CompleteGreet i React eller Vue?

En videobubbla kan läggas till i React eller Vue med integrationskoden från CompleteGreet. Rätt metod beror på projektet och om sidorna renderas i webbläsaren eller på servern. Följ den aktuella installationsguiden i stället för att anta att samma kod passar överallt.

Illustration av hur CompleteGreet installeras i React eller Vue

Ett vanligt arbetsflöde ser ut så här:

  1. Logga in i CompleteGreet och öppna området för installation eller webbplatser. Menynamnet kan ändras mellan versioner.
  2. Välj den plattform eller integrationsmetod som passar projektet. För en vanlig React- eller Vue-konfiguration kan en generell HTML-integration vara aktuell.
  3. Kopiera koden som visas för din webbplats. Kontrollera att den innehåller rätt webbplats-id och kommer från ditt konto.
  4. Lägg koden på den plats som den aktuella dokumentationen från ramverket och CompleteGreet rekommenderar och spara ändringen.
  5. Starta utvecklingsmiljön och besök flera rutter. Kontrollera var widgeten visas och om den laddas utan fel.

Om bubblan inte visas bör du kontrollera cache, konsolfel, domänregler och samtyckesinställningar innan du ändrar koden.

Hur fungerar det med Next.js och Nuxt?

Med Next.js eller Nuxt måste du ta hänsyn till serverrendering. Widgetkod som använder webbläsarobjekt får bara köras på klientsidan.

I Next.js bör du använda den klientbaserade skriptmetod som rekommenderas för projektets version. Kontrollera laddningsstrategin och testa att widgeten inte skapar hydreringsfel.

I Nuxt kan en klientbaserad plugin eller en annan dokumenterad metod användas. Filnamn och konfiguration varierar mellan Nuxt-versioner, så jämför med den aktuella Nuxt-dokumentationen före implementeringen.

När widgeten är laddad måste du testa hur den beter sig vid ruttändringar. Anta inte att den automatiskt behåller rätt tillstånd på alla rutter.

Vad kan du anpassa i React eller Vue?

Inriktning efter sida och besökare

Om kontot erbjuder sidregler kan du välja bestämda rutter, till exempel en pris- eller demosida. Andra villkor, som enhet, tid på sidan eller skrolldjup, måste kontrolleras i det aktuella abonnemanget.

Illustration av vad som kan anpassas för en videobubbla i React eller Vue

Regler som hanteras i panelen kan uppdateras utan en ny driftsättning av själva webbplatsen. Testa ändå hur ändringen läses in i den aktuella integrationen.

Handlingar och klickbeteende

Knappen i videobubblan kan använda handlingarna som erbjuds i kontot, till exempel att öppna en webbadress eller starta en annan godkänd handling. Bygg inte kring en integration förrän du har bekräftat att den stöds.

Om CompleteGreet erbjuder dokumenterade händelser eller API:er för React eller Vue kan de kopplas till applikationslogiken. Håll integrationen åtskild från ruttning och tillstånd och testa felsituationer.

Formulärfält och fördelning av förfrågningar

Om abonnemanget innehåller ett formulär kan du välja tillgängliga fält och etiketter. Be bara om uppgifter du behöver och kontrollera validering och samtycke före publicering.

Inskickningar kan eventuellt skickas vidare med integrationer eller webhooks som stöds. Bekräfta vilka mål som finns och undvik att skicka personuppgifter till en kanal utan rätt åtkomstkontroll.

Visuell profil och placering

Anpassa tillgängliga färger, hörn och miniatyrbild till webbplatsen. Välj en placering som inte krockar med fast navigering, chatt, varukorg eller andra flytande element.

Bland videowidgetar för moderna webbplatser bör du kontrollera hur typsnitt och CSS ärvs i just ditt projekt. Utgå inte från att typografin alltid anpassas automatiskt utan testning.

#cg-ig-PL8 {
–cg-primary: #3D5ACE;
–cg-accent: #E48333;
–cg-bg: #f7f7fb;
–cg-border: #e2e2ea;
–cg-text: #1a1a2e;
–cg-text-sec: #4a4a68;
–cg-text-muted: #7a7a96;
–cg-white: #ffffff;
font-family: -apple-system, BlinkMacSystemFont, “Segoe UI”, Roboto, Helvetica, Arial, sans-serif;
background: var(–cg-bg);
border: 1px solid var(–cg-border);
border-radius: 12px;
max-width: 600px;
margin: 0 auto;
overflow: hidden;
}
#cg-ig-PL8 .cg-accent-bar {
height: 4px;
background: var(–cg-primary);
}
#cg-ig-PL8 .cg-header {
padding: 24px 24px 16px;
text-align: center;
}
#cg-ig-PL8 .cg-header h3 {
margin: 0 0 8px;
font-size: 20px;
font-weight: 700;
color: var(–cg-text);
line-height: 1.3;
}
#cg-ig-PL8 .cg-header p {
margin: 0;
font-size: 14px;
color: var(–cg-text-sec);
line-height: 1.5;
}
#cg-ig-PL8 .cg-progress {
display: flex;
justify-content: space-between;
padding: 0 32px 24px;
position: relative;
}
#cg-ig-PL8 .cg-progress::before {
content: ”;
position: absolute;
top: 12px;
left: 48px;
right: 48px;
height: 2px;
background: var(–cg-border);
z-index: 0;
}
#cg-ig-PL8 .cg-progress-step {
width: 28px;
height: 28px;
border-radius: 50%;
background: var(–cg-white);
border: 2px solid var(–cg-border);
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
font-weight: 700;
color: var(–cg-text-muted);
position: relative;
z-index: 1;
}
#cg-ig-PL8 .cg-progress-step.active {
border-color: var(–cg-primary);
background: var(–cg-primary);
color: var(–cg-white);
}
#cg-ig-PL8 .cg-progress-step.complete {
border-color: var(–cg-primary);
background: var(–cg-white);
color: var(–cg-primary);
}
#cg-ig-PL8 .cg-steps {
padding: 0 24px 24px;
}
#cg-ig-PL8 .cg-step {
display: flex;
gap: 16px;
margin-bottom: 20px;
position: relative;
}
#cg-ig-PL8 .cg-step:last-child {
margin-bottom: 0;
}
#cg-ig-PL8 .cg-step-badge {
width: 32px;
height: 32px;
border-radius: 50%;
background: var(–cg-primary);
color: var(–cg-white);
display: flex;
align-items: center;
justify-content: center;
font-size: 14px;
font-weight: 700;
flex-shrink: 0;
}
#cg-ig-PL8 .cg-step-content {
flex: 1;
background: var(–cg-white);
border: 1px solid var(–cg-border);
border-radius: 8px;
padding: 16px;
}
#cg-ig-PL8 .cg-step-title {
font-size: 15px;
font-weight: 600;
color: var(–cg-text);
margin: 0 0 6px;
}
#cg-ig-PL8 .cg-step-desc {
font-size: 13px;
color: var(–cg-text-sec);
margin: 0 0 12px;
line-height: 1.5;
}
#cg-ig-PL8 .cg-code-block {
background: #1a1a2e;
border-radius: 6px;
padding: 12px 40px 12px 12px;
position: relative;
overflow-x: auto;
}
#cg-ig-PL8 .cg-code-block pre {
margin: 0;
font-family: “SF Mono”, Monaco, “Cascadia Code”, “Roboto Mono”, Consolas, “Courier New”, monospace;
font-size: 12px;
line-height: 1.6;
color: #e2e2ea;
white-space: pre-wrap;
word-break: break-word;
}
#cg-ig-PL8 .cg-code-block .cg-copy-btn {
position: absolute;
top: 8px;
right: 8px;
background: var(–cg-accent);
color: var(–cg-white);
border: none;
border-radius: 4px;
padding: 4px 10px;
font-size: 11px;
font-weight: 600;
cursor: default;
}
#cg-ig-PL8 .cg-cta {
padding: 0 24px 24px;
text-align: center;
}
#cg-ig-PL8 .cg-cta-btn {
display: inline-block;
background: var(–cg-primary);
color: var(–cg-white);
text-decoration: none;
font-size: 15px;
font-weight: 600;
padding: 14px 28px;
border-radius: 8px;
transition: background 0.2s;
}
#cg-ig-PL8 .cg-cta-btn:hover {
background: #2f48a8;
}
#cg-ig-PL8 .cg-source {
text-align: center;
padding: 0 24px 20px;
font-size: 11px;
color: var(–cg-text-muted);
}
#cg-ig-PL8 .cg-source a {
color: var(–cg-text-muted);
text-decoration: none;
}
@media (max-width: 480px) {
#cg-ig-PL8 .cg-header {
padding: 20px 16px 12px;
}
#cg-ig-PL8 .cg-progress {
padding: 0 20px 20px;
}
#cg-ig-PL8 .cg-progress::before {
left: 32px;
right: 32px;
}
#cg-ig-PL8 .cg-steps {
padding: 0 16px 20px;
}
#cg-ig-PL8 .cg-step {
gap: 12px;
}
#cg-ig-PL8 .cg-step-content {
padding: 14px;
}
#cg-ig-PL8 .cg-cta {
padding: 0 16px 20px;
}
#cg-ig-PL8 .cg-cta-btn {
padding: 12px 20px;
font-size: 14px;
width: 100%;
box-sizing: border-box;
}
}
Illustration av ett arbetsflöde i fem steg för att lägga till en CompleteGreet-videobubbla i ett React- eller Vue-projekt.

Installera CompleteGreet i React eller Vue

Exempel på ett enkelt arbetsflöde

1
2
3
4
5

1

Skapa ett konto

Skapa ett CompleteGreet-konto och hämta det webbplats-id eller den integrationskod som visas i panelen.

2

Välj installationsmetod

Använd den metod som den aktuella dokumentationen från CompleteGreet rekommenderar för ditt projekt.

Hämta den aktuella integrationskoden från ditt CompleteGreet-konto.

3

Koppla integrationen till projektet

Följ det dokumenterade exemplet för React, Vue eller vanlig HTML i den version du använder.

Använd den aktuella import- eller skriptkoden från dokumentationen.

4

Lägg till widgeten i appen

Placera integrationen i rotlayouten eller den klientbaserade del som rekommenderas för din arkitektur.

Lägg in ditt webbplats-id med den metod som dokumentationen anger.

5

Anpassa och publicera

Lägg till videon, välj tillgängliga färger och regler och testa hela upplevelsen före publicering.

Källa: exempel på installation baserat på artikelns arbetsflöde

Se den statiska översikten ovan för hela arbetsflödet.

Vad bör du kontrollera före publicering?

Testa videobubblan på riktiga enheter före publicering. Safari på iOS och Chrome på mobil kan bete sig olika, och den flytande knappen måste fungera tillsammans med navigeringen.

Mät Core Web Vitals före och efter installationen. En videobubbla bör inte skjuta viktiga prestandamätvärden över gränserna i den aktuella vägledningen. Googles vägledning för Web Vitals förklarar hur du bedömer layoutförändringar och andra mätvärden. Kontrollera att utrymmet för widgeten inte flyttar innehåll medan skriptet laddas.

Gå igenom sidreglerna på alla relevanta rutter. I React och Vue kan widgeten ligga kvar vid ruttändringar eller laddas om, beroende på var och hur integrationen är placerad.

Bekräfta att hälsningen bara visas på de valda webbadresserna och att den döljs i kassaflöden, konton eller privata områden där den inte hör hemma.

Mobildata glöms ofta bort vid testning.

En bakgrundsvideo som startar automatiskt på varje sida kan använda onödigt mycket data. Visa hellre en statisk miniatyrbild med en tydlig uppspelningsknapp så att besökaren själv väljer när videon ska laddas.

Kontrollera också lagerordningen mot modaler, menyer och paneler. En hamburgermeny kan hamna under videobubblan, eller bubblan kan döljas bakom ett popupfönster. Sådana konflikter syns ofta först på den riktiga webbplatsen.

Testa till sist hela besöksresan som en utloggad användare. Töm cache och relevanta kakor och gå från landningssidan till den önskade handlingen. En videobubbla ska kännas som en naturlig del av upplevelsen, inte som ett störande popupfönster.

En videobubbla i React eller Vue läggs vanligtvis in med en extern integration som laddas vid sidan av applikationen. Kontrollera hur skriptet påverkar renderingen i stället för att anta att det aldrig blockerar eller skapar fel.

Arbetsflödet nedan visar var integrationen ofta placeras i en enkelsidesapplikation och vilka tester som behövs på olika rutter.

Logga in i CompleteGreet, skapa eller välj webbplatsen och hämta den aktuella installationsinformationen. Plattformsväljaren i panelen kan ändras, så använd instruktionen som faktiskt visas i kontot.

Kopiera skriptet eller integrationskoden från installationsvyn. Den ska innehålla rätt webbplats-id.

Hämta den aktuella skriptkoden från ditt CompleteGreet-konto.
  1. Hitta projektets huvudmall, rotlayout eller klientbaserade ingång.
  2. Placera koden där den aktuella vägledningen för ramverket och CompleteGreet rekommenderar. I serverrenderade appar får webbläsarkod inte köras på servern.
  3. Spara ändringen och starta om utvecklingsmiljön om byggverktyget kräver det.

Även om integrationen kan laddas asynkront måste du mäta effekten på Time to Interactive och andra relevanta prestandamätvärden i den faktiska appen.

Om du använder React Router eller Vue Router måste du testa om bubblan och videons tillstånd följer ruttändringarna korrekt. Beteendet kan bero på integrationen och versionen.

Använd inte en generell procentsats för fler förfrågningar som förväntan. Jämför kvalificerade förfrågningar före och efter testet på sidor med tydlig avsikt.

Testa både dator och mobil före produktion. Bubblan ska synas utan att täcka innehåll, och kontroller eller behörigheter måste följa W3C:s vägledning för tillgänglighet så att tangentbord och skärmläsare fungerar så bra som möjligt.

Vanliga frågor

Hur lägger jag till CompleteGreet i React utan att göra paketet onödigt stort?

Använd den integrationsmetod som rekommenderas i den aktuella dokumentationen. Mät paketstorlek, nätverksförfrågningar och renderingsprestanda före och efter, eftersom ingen extern resurs är helt kostnadsfri.

Varför visas inte CompleteGreet-bubblan under lokal utveckling i React?

Kontrollera först webbadressen och porten mot domänreglerna i kontot. Leta sedan efter konsolfel, blockering från samtyckesverktyg, cache och om skriptet faktiskt laddas.

Gör CompleteGreet React-appen långsammare?

Alla externa integrationer kan påverka prestandan. Mät Core Web Vitals, nätverk, huvudtråd och videoladdning på representativa sidor och enheter i stället för att förlita dig på ett fast löfte om filstorlek eller tid.

Kan jag visa olika CompleteGreet-videor på olika rutter i React Router?

Det beror på vilka kampanj-, rutt- och API-funktioner den aktuella CompleteGreet-lösningen erbjuder. Använd bara dokumenterade metoder och testa hur widgeten uppdateras när webbadressen ändras.

Fungerar CompleteGreet med serverrenderade React-ramverk som Next.js?

En klientbaserad integration kan fungera i serverrenderade ramverk när den laddas på rätt plats. Följ dokumentationen för den aktuella Next.js-versionen och testa att koden inte körs på servern eller skapar hydreringsfel.

Vad kostar CompleteGreet för en React-baserad SaaS-tjänst med omkring 10 000 besökare i månaden?

Pris, besöksgräns och beräkningsmodell kan ändras. Använd den aktuella prissidan eller kontot för att hitta rätt abonnemang och kontrollera hur unika besökare och eventuella överskridanden hanteras.

Azad Habib

Azad Habib

CEO & Founder of CompleteGreet

Azad Habib is the founder of CompleteGreet. With a background in ecommerce and user experience, he works at the intersection of trust, clarity, and conversion to help businesses make their websites feel more human from the first click.