Integrering av rullgardinsdriven PDF URL-byte i Wix med hjälp av JavaScript-meddelanden

Temp mail SuperHeros
Integrering av rullgardinsdriven PDF URL-byte i Wix med hjälp av JavaScript-meddelanden
Integrering av rullgardinsdriven PDF URL-byte i Wix med hjälp av JavaScript-meddelanden

Förbättra PDF Viewer-funktionalitet på en Wix-bibliotekswebbplats

Att visa ett stort arkiv av PDF-filer på ett organiserat och användarvänligt sätt är avgörande för att förbättra användarupplevelsen på ett offentligt biblioteks webbplats. Målet är att erbjuda besökarna sömlös tillgång till historiska dokument som gamla tidningar, som lagras som PDF-filer. I det här projektet skapar användningen av Wix, Velo och ett HTML-inbäddningselement grunden för ett robust system.

Wix plattform stöder inbäddade element genom iframes, vilket gör att användare kan lägga till interaktiva komponenter som PDF-visare. Denna PDF-visare är inbäddad med en iframe, och för närvarande definierar en statisk URL vilket dokument som visas. Behovet av att dynamiskt ändra PDF-filen baserat på användarinmatning är dock avgörande för en smidig upplevelse.

Utmaningen är att tillåta användare att välja ett år och en månad från två rullgardinsmenyer, som sedan kommer att utlösa en ändring i PDF-dokumentet som visas. Detta innebär att man integrerar JavaScript-meddelanden för att kommunicera med iframe, vilket gör att URL:en för dokumentet kan ändras enligt rullgardinsvalen.

Detta tillvägagångssätt minskar inte bara behovet av många statiska Wix-sidor utan förenklar också åtkomsten till bibliotekets PDF-arkiv. Nedan utforskar vi stegen och lösningarna som behövs för att implementera detta med Velo-ramverket och JavaScript.

Kommando Exempel på användning
PSPDFKit.load() Den här metoden initierar PSPDFKit PDF-visaren inuti en specifik behållare. Den laddar en PDF-fil från den angivna URL:en, vilket gör den synlig i inbäddningselementet. Det är specifikt för PSPDFKits JavaScript-bibliotek, som är skräddarsytt för att bädda in och visa PDF-dokument.
postMessage() Används för att kommunicera mellan det överordnade fönstret och en inbäddad iframe. I detta sammanhang skickar den ett meddelande från huvudsidan till iframen, vilket gör att iframen kan uppdatera sitt innehåll (PDF-URL) baserat på val i rullgardinsmenyn.
window.addEventListener("message") Den här händelseavlyssnaren läggs till i iframen för att lyssna efter meddelanden som skickas via postMessage(). Den bearbetar meddelandet för att dynamiskt ladda ett nytt PDF-dokument i iframen baserat på mottagna data.
event.data Inom meddelandehändelsehanteraren innehåller event.data data som skickas från det överordnade fönstret. I det här fallet inkluderar den URL:en för den valda PDF-filen som ska laddas in i PSPDFKit-visningsprogrammet.
document.getElementById() Denna DOM-manipulationsmetod hämtar ett HTML-element genom dess ID. Den används för att fånga användarinmatning från rullgardinsmenyn, vilket gör att skriptet kan bestämma det valda året och månaden för PDF-URL-uppdateringen.
DOMContentLoaded En händelse som säkerställer att JavaScript körs först efter att DOM har laddats helt. Detta förhindrar fel när man försöker komma åt DOM-element innan de existerar.
addEventListener("change") Den här händelseavlyssnaren övervakar rullgardinselementen för eventuella ändringar. När en användare väljer ett annat år eller månad utlöses funktionen för att uppdatera PDF-URL:n och ladda motsvarande dokument.
template literals Mall-literals (omslutna av backticks) tillåter inbäddning av variabler i strängar, vilket gör det enkelt att dynamiskt generera URL:en för den valda PDF-filen. Till exempel: `https://domain.tld/${year}_${month}_etc.pdf`.
container: "#pspdfkit" I PSPDFKit-initieringen anger container HTML-elementet (efter ID) där PDF-visaren ska renderas. Detta är viktigt för att definiera var PDF:en ska visas på sidan.

Dynamisk PDF-laddning med rullgardinsval i Wix

I den här lösningen använder vi ett par rullgardinselement på en Wix-sida för att dynamiskt ändra URL:en till en PDF-fil som visas i en inbäddad iFrame. Detta system är särskilt användbart för offentliga bibliotek som vill ge enkel åtkomst till arkiverade PDF-filer för tidningar. Kärnfunktionaliteten drivs av JavaScript-meddelanden, som skickar användarval från rullgardinsmenyn till den inbäddade PDF-visaren. PSPDFKit-visningsprogrammet används för att rendera PDF-filerna i iFrame, och vi manipulerar visningsprogrammet genom att ändra webbadressen baserat på användarens val av år och månad. Detta ger ett strömlinjeformat sätt att visa stora arkiv utan att skapa flera statiska Wix-sidor.

Den första rullgardinsmenyn väljer år och den andra rullgardinsmenyn väljer månad. När användaren väljer båda, konstruerar systemet lämplig URL för motsvarande PDF-fil. De PSPDFKit.load() Metoden är central för detta, eftersom den laddar den nya PDF-filen i iFrame baserat på den uppdaterade URL:en. Denna metod är en del av PSPDFKit-biblioteket, som är inbäddat på sidan genom ett externt skript. De postMessage() API är också avgörande i den alternativa lösningen, som möjliggör meddelanden mellan den överordnade sidan och iframen. Genom att skicka ett meddelande som innehåller den nya PDF-URL:n till iframe uppdateras PDF-visaren dynamiskt.

För att säkerställa att skriptet endast körs när DOM är fulladdat använder vi DOMContentLoaded händelse. Detta säkerställer att rullgardinselementen och PSPDFKit-behållaren är tillgängliga för skriptet. Vi lägger också till evenemangslyssnare i varje rullgardinsmeny. När användaren väljer ett år eller månad, fångar motsvarande händelseavlyssnare valet och anropar en funktion för att ladda om PDF-läsaren med rätt URL. Detta hanteras genom en enkel funktion som använder mall-literals för att konstruera URL:en från de valda värdena i rullgardinsmenyn. Denna metod är inte bara lätt att implementera utan också mycket modulär, vilket möjliggör enkla uppdateringar när nya arkiv läggs till.

I det andra tillvägagångssättet använder vi postMessage() för att kommunicera mellan den överordnade sidan och iFrame. Den överordnade sidan lyssnar efter ändringar i rullgardinsmenyn och skickar ett meddelande som innehåller den nya PDF-URL:n till iFrame, som tar emot meddelandet med en händelseavlyssnare. Den här metoden är användbar när man hanterar mer isolerade miljöer där iframen inte kan interagera direkt med den överordnade sidans DOM. Båda metoderna ger effektiva sätt att uppdatera innehållet i en inbäddad PDF-visare dynamiskt, vilket minskar behovet av flera statiska sidor och erbjuder en användarvänlig surfupplevelse.

Implementera dropdown-baserad URL-byte för PDF Viewer i Wix

Frontend-skript med JavaScript och Velo-ramverk

// HTML structure for the dropdowns and embed element
<div>
  <label for="yearSelect">Select Year:</label>
  <select id="yearSelect">
    <option value="">--Year--</option>
    <option value="1962">1962</option>
    <option value="1963">1963</option>
    <!-- Add other years dynamically or manually -->
  </select>
  <label for="monthSelect">Select Month:</label>
  <select id="monthSelect">
    <option value="">--Month--</option>
    <option value="January">January</option>
    <option value="February">February</option>
    <!-- Add other months dynamically or manually -->
  </select>
</div>
// Embedded PDF viewer in iframe
<div id="pspdfkit" style="width: 100%; height: 100%; max-width: 1920px;"></div>
<script src="https://cdn.cloud.pspdfkit.com/pspdfkit-web@2024.5.2/pspdfkit.js"></script>
// JavaScript to update URL based on dropdown selection
<script>
document.addEventListener("DOMContentLoaded", () => {
  const yearSelect = document.getElementById("yearSelect");
  const monthSelect = document.getElementById("monthSelect");
  function loadPDF(year, month) {
    if (year && month) {
      const url = `https://domain.tld/${year}_${month}_etc.pdf`;
      PSPDFKit.load({
        container: "#pspdfkit",
        document: url,
      }).catch((error) => {
        console.error("Failed to load PDF:", error);
      });
    }
  }
  yearSelect.addEventListener("change", () => {
    loadPDF(yearSelect.value, monthSelect.value);
  });
  monthSelect.addEventListener("change", () => {
    loadPDF(yearSelect.value, monthSelect.value);
  });
});
</script>

Alternativ tillvägagångssätt: Använda PostMessage API för iFrame-kommunikation

Frontend-skript som använder postMessage API för bättre isolering mellan iframe och överordnat dokument

// HTML structure remains the same for dropdowns
// Here, we use iframe with a postMessage-based communication system
<iframe id="pdfViewer" src="about:blank" style="width: 100%; height: 100%;"></iframe>
// JavaScript for sending messages to iframe
<script>
document.addEventListener("DOMContentLoaded", () => {
  const yearSelect = document.getElementById("yearSelect");
  const monthSelect = document.getElementById("monthSelect");
  const iframe = document.getElementById("pdfViewer");
  function updatePDFViewer(year, month) {
    if (year && month) {
      const url = `https://domain.tld/${year}_${month}_etc.pdf`;
      iframe.contentWindow.postMessage({
        type: "updatePDF",
        url: url
      }, "*");
    }
  }
  yearSelect.addEventListener("change", () => {
    updatePDFViewer(yearSelect.value, monthSelect.value);
  });
  monthSelect.addEventListener("change", () => {
    updatePDFViewer(yearSelect.value, monthSelect.value);
  });
});
</script>
// Inside iframe, use this script to receive the message
<script>
window.addEventListener("message", (event) => {
  if (event.data.type === "updatePDF" && event.data.url) {
    PSPDFKit.load({
      container: "#pspdfkit",
      document: event.data.url,
    });
  }
});
</script>

Förbättra PDF-arkivtillgänglighet med Wix och JavaScript Messaging

En annan viktig faktor när du använder dropdown-element för att dynamiskt ändra en inbäddad PDF-URL i Wix är att säkerställa att interaktionen mellan iFrame och huvudsidan är effektiv. Medan JavaScript-meddelanden tillåter oss att skicka data mellan dessa två komponenter, kan prestandan och användarupplevelsen förbättras genom att optimera hur valet utlöser uppdateringar. Detta kan göras genom att avstudsa inmatningen, vilket innebär att systemet bara uppdaterar PDF-läsaren efter att användaren har slutfört sitt val, snarare än vid varje ändring.

En annan aspekt som inte har behandlats ännu är cross-origin resursdelning (CORS). Eftersom PDF-filerna finns på en extern server (som Digital Ocean), är det avgörande att se till att servern är konfigurerad för att tillåta åtkomst från Wix-domänen. Om serverns CORS-inställningar inte är korrekt konfigurerade kan det hända att PDF-läsaren inte kan läsa in dokumentet, vilket resulterar i fel. Korrekta CORS-rubriker på servern som är värd för PDF-filerna är avgörande för sömlös integration mellan de två plattformarna.

Dessutom kan du förbättra systemet genom att förinläsa PDF-filer som ofta används för att minska laddningstiderna. Förladdningsstrategier är användbara när användaren sannolikt byter mellan flera månader eller år. Genom att lagra dessa filer i webbläsarens cache, kommer efterföljande dokumentladdningar att gå snabbare, vilket ger en smidigare användarupplevelse. Detta kan göras med hjälp av servicearbetare eller andra cachningsmekanismer, som kan ställas in för att förladda PDF-filer när användaren navigerar genom de tillgängliga alternativen.

Vanliga frågor om dynamiska PDF-inbäddningar i Wix

  1. Hur lägger jag till dropdown-väljarna i Wix?
  2. Du kan lägga till rullgardinselement med hjälp av Wix-redigeraren och använda JavaScript för att kontrollera dem genom att tilldela unika ID:n. Rullgardinselementen kommer att utlösa ändringar i PDF-webbadressen genom document.getElementById().
  3. Vad gör PSPDFKit.load() kommando gör?
  4. De PSPDFKit.load() metod är ansvarig för att rendera PDF-visaren och ladda en specifik PDF-fil i den. Denna metod är en del av PSPDFKit-biblioteket som används för att visa PDF-filer dynamiskt.
  5. Kan jag använda postMessage() för gränsöverskridande kommunikation?
  6. Ja, den postMessage() API är speciellt utformat för att kommunicera mellan olika ursprung, till exempel mellan en överordnad sida och en iFrame, vilket är avgörande för denna implementering.
  7. Hur hanterar jag fel när jag laddar en PDF?
  8. Du kan hantera fel genom att lägga till en .catch() block till PSPDFKit.load() funktion för att fånga upp eventuella fel som uppstår under laddningsprocessen och visa ett lämpligt felmeddelande.
  9. Behöver jag konfigurera min server för CORS?
  10. Ja, om dina PDF-filer finns på en annan domän måste du se till att servern är konfigurerad med rätt CORS rubriker för att ge Wix-webbplatsen åtkomst till dokumenten.

Slutliga tankar om dynamisk PDF-visning

Denna lösning förenklar processen att visa stora arkiv av PDF-filer på en enda sida. Genom att använda två rullgardinselement för att välja år och månad kan vi dynamiskt uppdatera PDF-visaren utan att skapa flera Wix-sidor.

Genom att kombinera flexibiliteten hos Velo-ramverket med JavaScript-meddelanden mellan rullgardinsmenyn och iFrame, ger denna metod ett effektivt sätt att organisera och presentera historisk data. Det är både skalbart och användarvänligt för offentliga webbplatser som biblioteksarkiv.

Källor och referenser för dynamisk PDF-laddning med Wix och JavaScript
  1. Ger detaljerad dokumentation om att arbeta med HTML iFrame-elementet och JavaScript-meddelanden på Wix med hjälp av Velo-ramverket. Besök Wix Developer Docs för mer information.
  2. PSPDFKits officiella dokumentation, som beskriver hur man bäddar in och laddar PDF-filer i en iFrame med deras JavaScript-bibliotek. Få tillgång till den här: PSPDFKit dokumentation .
  3. En guide om hur du implementerar cross-origin resource sharing (CORS) för att säkerställa korrekt PDF-laddning från externa servrar som Digital Ocean. Du kan läsa mer på MDN Web Docs på CORS .