Valikko
Edustava ostotehtävä

Kokeile yhtä tuotetta. Näe jokainen rehellinen vastaus.

Tarkista tämän tuotteen lähimyymälät. Vertaa sitten kahdeksaa widgetiä ja kokeile työkalua.

Mistä ostaa

Purus Corner Linear Drain Tukholman lähellä

Rakennettu widget-paketti

Ladataan käytössä olevaa upotusta osoitteesta cdn.test.stockisto.com…

Tämä esimerkki näyttää esimerkkituotteen lähimyymälät.

Oma sisäänkäyntisi

Anna viimeisen klikkauksen päätyä sinulle

Tuotettasi etsivän asiakkaan pitäisi päätyä paikkaan, jota hallitset. Se tarkoittaa omalla sivustollasi olevaa mistä ostaa -sivua tai tuotesivuja, joita jo ylläpidät. Stockisto näkyy siellä brändisi mukaisena.

yourbrand.example/where-to-buy
Jokaisen upotuksen taustalla

Yksi paketti, yksi renderöintimoottori, yksi sopimus.

Jokainen yllä oleva kortti on sama komentosarja, joka lukee eri määritteitä. Jälleenmyyjän oma data ratkaisee, mitä rivi näyttää. Tunniste ratkaisee, miltä upotus näyttää ja miten se toimii.

Jälleenmyyjän portaat

Viisi porrasta julkisesta listauksesta varaukseen ja noutoon.

Rivi näyttää vain sen, mitä sen jälleenmyyjä on ansainnut. Jokainen askelma lisää vahvemman toiminnan, ja vahvemman toiminnan haluaminen pitää jälleenmyyjän tiedot ajan tasalla.

  1. 01ListattuNimi, osoite ja julkaistut aukioloajat ovat peräisin julkisista tiedoista. Varastoraportti, jota kukaan ei ole vahvistanut, merkitään raportiksi ja näytetään neutraalilla listausvärillä, ei koskaan varmana vihreänä.Julkiset tiedot
  2. 02TavoitettavissaSivustolinkki näytetään, kun myymälä on julkaissut verkkosivuston, puhelulinkki, kun numeroon voi soittaa, ja reittiohje, kun listauksessa on todelliset koordinaatit. Kukin toiminto näkyy vain, kun sen oma tieto on saatavilla.Puhelin tai nettisivu
  3. 03Vahvistettu varastotilaOman varastotilansa toimittava myymälä saa vahvistetun merkinnän ja viimeisimmän raportin ajankohtaan perustuvan tuoreustiedon. Nämä rivit sijoitetaan vahvistamattomien edelle.Varastosyöttö
  4. 04HintaJälleenmyyjän omilla tuotesivuilla rivi voi näyttää myymälän hinnan. Palvelin lähettää sen vain, kun myymälä julkaisee alle kuukauden vanhan hinnan, joten rivillä ei näytetä vanhentunutta hintaa.Julkaistu hinta
  5. 05VarausVaraa ja nouda -näkymä muuttaa vahvistetun rivin varaukseksi, jonka ostaja tekee poistumatta sivulta. Rivi näyttää ”Varattu” vasta, kun varauspyyntö on todella onnistunut.Varaukset käytössä

Jälleenmyyjän vahvistama varastotila ja etäisyys ratkaisevat järjestyksen. Sijoitusta ei myydä. Jokainen sivusto-, puhelu- ja reittiohjepainallus tallennetaan yhdeksi siirtymäksi vasta, kun suostumustyökalusi on ottanut analytiikan käyttöön. Sitä ennen upotus ei lähetä mitään.

Teemat

Teema koostuu määritteistä, ei omasta haarasta

Viisi nimettyä esiasetusta ja alla olevat määritteet luetaan kaikki script-tagista. Kaikkien tämän sivun ulkoasujen taustalla on yksi paketti ja yksi renderöintimoottori, joten teema ei vaadi erillistä koontia tai ylläpidettävää versiota.

  • heritageOletus. Lämmin paperisävy, metsänvihreä korostus ja pehmeä varjo. Kaikki tämän sivun upotukset käyttävät tätä teemaa.
  • lightNeutraali harmaa ja valkoinen isäntäsivuille, joille lämmin paperisävy ei sovi.
  • darkLämpimät tummat pinnat tummille isäntäsivuille, ilman hehkua ja tasaisella reunalla.
  • minimalValkoinen ilman kehystä: pienet kulmat, hiuksenhienot reunat eikä varjoa. Tekstiväri periytyy sivultasi, ainoa asia, jonka tämä esiasetus jättää isäntäsivun vastuulle.
  • denseHeritage-värit, tiivis kirjasinkoko ja välitys sivupalkki- ja alatunnistesijoitteluihin.
Tokenit, joita se lukee
data-theme-preset="dark"
Yksi viidestä yllä olevasta. Muut arvot palautuvat Heritage-oletukseen.
data-theme="#C06B4A"
Korostusvärisi 3- tai 6-numeroisena heksadesimaalikoodina.
data-radius-scale="sm"
Kulma-asteikko: sm, md tai lg.
data-density="compact"
Riviväli: väljä tai tiivis.
data-shadow="flat"
Varjo: pehmeä, tasainen tai ei mitään.
data-font="serif"
Kirjasin: grotesk, sans, serif, mono tai system. Se nimetään mutta sitä ei ladata, joten upotus käyttää sivulla jo olevaa kirjasinpinoa.
Kuka muokkaaTagin omistaja. Hallintapaneelin rakennustyökalu esikatselee määritteet ja kirjoittaa ne liitettävään koodinpätkään. Sen jälkeen teema on tagissa: muuta sijoittelua muokkaamalla määritteitä, älä ottamalla upotusta uudelleen käyttöön.
Kontrasti tarkistetaan renderöinnin yhteydessäKorostusväri hylätään, jos sen kontrastisuhde taustaan ei saavuta arvoa 4,5:1, ja widget käyttää omaa korostusväriään. Tarkistus tehdään jokaisella sivun katselulla, ei vain tallennettaessa, joten brändiväri ei voi tehdä rivistä huomaamatta lukukelvotonta. Varastotilan ja tuoreuden värejä ei voi teemoittaa: korostusväri tai esiasetus ei voi vaihtaa varastoväitteen väriä.
Jokaisella upotuksella on oma teemansaBrändisivun upotus ja kaupan upotus omalla sivustollaan ovat erillisiä tunnisteita, joissa on erilliset attribuutit samoilla tiedoilla, joten kauppasivusto pysyy kauppasivustona.
Kolme konfigurointikerrosta

Kirjoitetaan kerran tagiin. Luetaan jokaisella renderöinnillä.

  1. 01Hallintapaneelisi kirjoittaa taginWidgetin rakennustyökalu esikatselee määrityksen, tuottaa script-tagin ja tallentaa määritykset, joihin haluat palata. Tililtäsi ei noudeta määrityksiä renderöinnin aikana: upotus tekee sen, mitä tagi määrittää. Siksi tagi toimii myös sivulla, jota kukaan ei ole koskenut vuoteen.
  2. 02Tagi määrittää sijoittelundata-widget-type valitsee widgetin, data-view Mistä ostaa -näkymän, data-map-height kehystetyn myymälähaun korkeuden ja teemamääritteet loput. Jäsentäjän tuntemattomat määritteet ohitetaan sen sijaan, että niiden merkitystä arvailtaisiin.
  3. 03Rivi ansaitsee loputJälleenmyyjän omat tiedot, ei tagi, ratkaisevat, mitä yksittäinen rivi näyttää. Yllä olevat portaat ovat koko malli. Et voi ottaa hintaa käyttöön myymälälle, joka ei julkaise hintaa, eikä upotus keksi sellaista.
Valmisteltu toteutukseen

Mihin kehittäjäsi sitoutuvat

Kaikki yllä oleva renderöityy sivun yläreunan yhdestä script-tagista. Nämä ovat sen toimintaperiaatteet. Jokainen niistä joko varmistetaan koontiportissa tai katetaan tämän ohjelmistovaraston testillä.

Yksi tagi
Yksi asynkroninen script-tagi sijoittelua kohden, eikä koontivaihetta. Widget renderöityy omaan shadow root -juureensa, kun selain tukee sitä, joten isäntäsivun CSS ja upotus eivät vaikuta toisiinsa. Kulmapainike ja varausilmoitus liitetään body-tasolle.
Paino on portti, ei lupaus
Julkaistu paketti mitataan jokaisessa koonnissa, ja koonti epäonnistuu, jos koko ylittää tallennetun ylärajan. Luku on widgetin omassa budjettitiedostossa eikä tässä tekstissä, joten sivu ei voi ajautua eri lukemaan.
Mikään ei lataudu aikaisin
Tagi on asynkroninen, ja tietopyyntö odottaa, kunnes upotus lähestyy näkymää. Kehystetyt kartta- ja asentajaosat ovat iframe-kehyksiä, joten karttalaatat kuormittavat kehystettyä sivua eivätkä tuotesivuasi.
Yksityisyyden oletusasetukset
Ei evästeitä. Analytiikka pysyy poissa käytöstä, kunnes data-analytics-consent on true. Sitä ennen upotus ei lähetä yhtään tapahtumaa. Se kirjoittaa vain yhden sessionStorage-avaimen, joka estää paluunavigointia laskemasta samaa tulosta kahdesti.
Näppäimistö ja kontrasti
Rivit, vaihtimet ja laajentimet ovat oikeita painikkeita, joten alusta hoitaa Enterin, välilyönnin ja kohdistusrenkaan. Valintaikkunat ottavat kohdistuksen, pitävät sarkainkohdistuksen sisällään, sulkeutuvat Escapella ja palauttavat kohdistuksen. Jokaisen esiasetuksen tekstiparit testataan WCAG AA:ta vasten widgetin testipaketissa. Sivun tekstivärin perivä esiasetus kirjaa tämän eikä väitä kontrastisuhdetta, jota se ei voi tietää.
Kun asiat epäonnistuvat
Estetty tai epäonnistunut komentosarja ei renderöi mitään ja jättää sivusi ennalleen. Hidas API näyttää latausrungon. Tavoittamaton API kertoo latauksen epäonnistuneen ja tarjoaa uutta yritystä, ei koskaan virheellistä tyhjää tilaa. Väärin määritetty tagi kirjaa puuttuvan määritteen ja lisää valvonnan löytämän merkin, mutta ei silti näytä ostajille mitään rikkoutunutta.
Kokeilualue

Tee siitä omasi ja kopioi sitten tagi

Valitse tila, teeman esiasetus, korostusväri ja asettelun määritteet. Käytössä oleva esikatselu hahmonnetaan ja koodinpätkä luodaan uudelleen muutosten mukana. Julkaistu upotus lukee oikeasti jokaisen näkyvän määritteen.

widgetin oletusarvo (#1E5E45)

Widget hylkää luettelon ulkopuoliset arvot turvallisesti. Tuntematon esiasetus tai virheellinen heksadesimaaliväri palautuu Heritage-oletukseen, joten kirjoitusvirhe ei voi rikkoa tuotesivua.

Ladataan käytössä olevaa upotusta osoitteesta cdn.test.stockisto.com…

<script
  src="https://cdn.test.stockisto.com/widget.js"
  data-stockisto-widget="true"
  data-stockisto-slug="demo-purus"
  data-api-base="https://api.test.stockisto.com"
  data-widget-type="where-to-buy"
  data-lat="59.3293"
  data-lng="18.0686"
  data-radius="50"
  data-supplier-name="Purus"
  data-jsonld="off"
  data-analytics-consent="false"
  async
></script>

data-analytics-consent pysyy arvossa "false" jokaisessa luodussa koodinpätkässä. Aseta arvoksi "true" vasta, kun suostumustyökalu (CMP) on tallentanut ostajan suostumuksen.

Hankalat isäntäsivut

Rakennettu vastaan hangoitteleville sivuille

Todellisilla isäntäsivuilla on aggressiivista CSS:ää, tiukkoja tietoturvakäytäntöjä ja rikkoutuneita ympäristöjä. Kolme näistä olosuhteista voidaan suorittaa tässä. Loput suoritetaan automaattisina testeinä synteettisiä hankalia isäntäsivuja vasten CI:ssä ja käyttöönotetussa ympäristössä. Jokaisella tämän osion väitteellä on sitä tukeva testi.

Vihamielinen: tyhjä CSS

Säilön tyylitiedosto määrittää div:empty { display:none !important }, säännön, joka pysäyttää yksinkertaiset upotukset huomaamatta ennen latausta. Widgetin liitoskohdassa on piilotettu merkkisolmu, joten se ei koskaan vastaa :empty-valitsinta ja renderöityy silti.

Ladataan käytössä olevaa upotusta osoitteesta cdn.test.stockisto.com…

Väärin määritetty tarkoituksella

Upotuksessa EI ole datalähdettä: ei bränditunnusta, toimittajatunnusta tai jälleenmyyjää. Katso, miten widget toimii ja mitä se kieltäytyy tekemästä.

Ladataan käytössä olevaa upotusta osoitteesta cdn.test.stockisto.com…

Avaa selainkonsoli: widget kirjasi täsmälleen puuttuvan määritteen. Konsolivirhe on widgetin tarkoituksellinen toiminto. Se on väärin määritetyn upotuksen ainoa rehellinen sivuvaikutus.

320px sarake

Sama käytössä oleva upotus on rajattu 320px:n sarakkeeseen, joka on tavallisen sivupalkki- tai mobiilipaikan kapein koko. Ei vaakasuuntaista ylivuotoa tai leikkautuneita toimintoja.

Ladataan käytössä olevaa upotusta osoitteesta cdn.test.stockisto.com…

Testattujen olosuhteiden matriisi

Jokainen rivi vastaa ohjelmistovarastossamme nyt olevaa automaattista testausta: yksikkösuojia jokaisella lähetyksellä ja selaintestejä synteettisiä hankalia isäntäsivuja vasten. Taulukko kertoo tämän testikattavuuden eikä tee sitä laajempia päätelmiä.

OlosuhdeMitä upotus takaaNäyttö
Tiukan CSP:n isäntä: default-src 'none'; vain CDN-komentosarja ja API-yhteys sallitaanKäynnistyy ja piirtyy ilman sisäistä komentosarjaa tai eval-riippuvuutta. Sivulla ei ole virheitä.Käyttöönotettu e2e (widget-hostile-host-matrix) + oikeiden selainten matriisi (tests/e2e/widget-host)
Tavallinen HTTP-sivu (suojaamaton konteksti, ei crypto.randomUUID:ta)Käynnistyy ilman sivuvirheitä. Pienoisohjelman tunnukset käyttävät suojattua UUID-varapolkua.Käyttöönotettu e2e (widget-hostile-host-matrix) + yksikkötason käynnistyssuoja jokaisella lähetyksellä (packages/widget)
Salausominaisuudeton isäntä: window.crypto puuttuu tai randomUUID on poistettuKäynnistyy määrityksen mukaisella v4-widgettunnuksella. Heitetty TypeError ei pysäytä upotusta.Yksikkötason käynnistyssuoja jokaisella lähetyksellä (packages/widget hostile-host-boot) + käyttöönotettu e2e
Aggressiivinen isäntäsivun CSS: div:empty { display:none } koko sivullaLiitoskohta säilyttää asettelulaatikon (piilotettu merkki, ei koskaan :empty), viivästetty lataus käynnistyy yhä ja widget piirtyy.Käyttöönotettu e2e (widget-host-css-deadlock, widget-hostile-host-matrix) + yllä oleva suora esittely
Hidas tai epäonnistuva API: 503, verkkovirhe, 8 sekunnin pysähdys tai koko alkuperän estoErillinen ja rehellinen ”lataus epäonnistui, yritä uudelleen” -tila sekä manuaalinen uudelleenyritys. Ei virheellistä ”ei jälleenmyyjiä” -tilaa eikä hiljaista tyhjää laatikkoa.Yksikkötestaus jokaisella lähetyksellä (packages/widget render-failure)
Kolmannen osapuolen alkuperä: upotus toimii Stockiston ulkopuolisessa verkkotunnuksessaKaikki datapyynnöt ovat nimettömiä API-pyyntöjä, joille CORS on avoin. Ei evästeitä eikä oletuksia samasta alkuperästä.Kaikki käyttöönotetut widget-määritykset toimivat synteettisissä kolmannen osapuolen alkuperissä (*.stockisto-e2e.example)
Puuttuva datalähde: ei bränditunnusta, toimittajatunnusta tai jälleenmyyjäjoukkoaKieltäytyy käynnistymästä: konsolivirhe nimeää määritteen ja data-stockisto-error-leima mahdollistaa valvonnan. Ostajille ei piirretä mitään rikkoutunutta.Yksikkötason käynnistystesti jokaisella lähetyksellä (packages/widget missing-data-source-boot) + yllä oleva suora esittely
Julkaisu

Erillistä kehityssprinttiä ei tarvita.

01

Liitä yksi tagi

Yksi script-tagi sivua kohden. Ei kokoamisvaihetta, asennettavaa pakettia eikä käsin mitoitettavaa iframe-kehystä.

02

Se sopii ympäröivälle sivulle

Leveys, rivikorkeus ja esitystapa ovat määritteitä. Sisäiset ja välilehtinäkymät pysyvät sivulla, joten hakukoneet voivat lukea ne.

03

Se sanoo vain sen, minkä voi todistaa

Varastotila, jota emme voi vahvistaa, merkitään eikä sitä nosteta esiin. Kun näytettävää ei ole, upotus kertoo sen eikä näytä nollaa.

04

Jälleenmyyjät nousevat portaikossa

Varastosyöte, hinnat, ostolinkki, siirto ostoskoriin, varaus. Jokainen jälleenmyyjän ansaitsema porras tuo ostajille kattavamman rivin, joten datan pitäminen rehellisenä kannattaa.

Näe se omassa luettelossasi.

Tuo jälleenmyyjäverkostosi, liitä yksi tagi ja katso, mitkä myymälät ostajasi valitsevat.

cebf50c · 2026-10-05 22:57