Integratie van dropdown-gestuurde PDF-URL-wisseling in Wix met behulp van JavaScript-berichten

Temp mail SuperHeros
Integratie van dropdown-gestuurde PDF-URL-wisseling in Wix met behulp van JavaScript-berichten
Integratie van dropdown-gestuurde PDF-URL-wisseling in Wix met behulp van JavaScript-berichten

Verbetering van de functionaliteit van de PDF-viewer op een Wix-bibliotheeksite

Het op een georganiseerde en gebruiksvriendelijke manier weergeven van een enorm archief aan PDF-bestanden is van cruciaal belang voor het verbeteren van de gebruikerservaring op de website van een openbare bibliotheek. Het doel is om bezoekers naadloze toegang te bieden tot historische documenten zoals oude kranten, die zijn opgeslagen als pdf. In dit project creëert het gebruik van Wix, Velo en een HTML-insluitelement de basis voor een robuust systeem.

Het platform van Wix ondersteunt ingebedde elementen via iframes, waardoor gebruikers interactieve componenten zoals PDF-viewers kunnen toevoegen. Deze PDF-viewer is ingesloten met behulp van een iframe en momenteel bepaalt een statische URL welk document wordt weergegeven. De noodzaak om het PDF-bestand dynamisch te wijzigen op basis van gebruikersinvoer is echter essentieel voor een soepele ervaring.

De uitdaging is om gebruikers in staat te stellen een jaar en een maand te selecteren uit twee vervolgkeuzelijsten, die vervolgens een wijziging in het weergegeven PDF-document teweegbrengen. Dit omvat het integreren van JavaScript-berichten om met het iframe te communiceren, waardoor de URL van het document kan veranderen op basis van de vervolgkeuzelijsten.

Deze aanpak vermindert niet alleen de behoefte aan talloze statische Wix-pagina's, maar vereenvoudigt ook de toegang tot het PDF-archief van de bibliotheek. Hieronder onderzoeken we de stappen en oplossingen die nodig zijn om dit te implementeren met behulp van het Velo-framework en JavaScript.

Commando Voorbeeld van gebruik
PSPDFKit.load() Deze methode initialiseert de PSPDFKit PDF-viewer in een specifieke container. Er wordt een PDF-bestand geladen vanaf de opgegeven URL, waardoor het zichtbaar wordt binnen het insluitelement. Het is specifiek voor de JavaScript-bibliotheek van PSPDFKit, die is afgestemd op het insluiten en bekijken van PDF-documenten.
postMessage() Wordt gebruikt om te communiceren tussen het bovenliggende venster en een ingesloten iframe. In deze context stuurt het een bericht van de hoofdpagina naar het iframe, waardoor het iframe de inhoud (de PDF-URL) kan bijwerken op basis van vervolgkeuzelijsten.
window.addEventListener("message") Deze gebeurtenislistener wordt toegevoegd aan het iframe om te luisteren naar berichten die via postMessage() zijn verzonden. Het verwerkt het bericht om dynamisch een nieuw PDF-document in het iframe te laden op basis van de ontvangen gegevens.
event.data Binnen de berichtgebeurtenishandler bevat event.data de gegevens die vanuit het bovenliggende venster zijn verzonden. In dit geval bevat het de URL van het geselecteerde PDF-bestand dat in de PSPDFKit-viewer moet worden geladen.
document.getElementById() Deze DOM-manipulatiemethode haalt een HTML-element op aan de hand van zijn ID. Het wordt gebruikt om gebruikersinvoer uit de vervolgkeuzelijstelementen vast te leggen, waardoor het script het geselecteerde jaar en de geselecteerde maand voor de PDF-URL-update kan bepalen.
DOMContentLoaded Een gebeurtenis die ervoor zorgt dat JavaScript pas wordt uitgevoerd nadat de DOM volledig is geladen. Dit voorkomt fouten bij het proberen toegang te krijgen tot DOM-elementen voordat ze bestaan.
addEventListener("change") Deze gebeurtenislistener controleert de vervolgkeuzelijstelementen op eventuele wijzigingen. Wanneer een gebruiker een ander jaar of een andere maand selecteert, wordt de functie geactiveerd om de PDF-URL bij te werken en het bijbehorende document te laden.
template literals Sjabloonliterals (omsloten door backticks) maken het mogelijk om variabelen in tekenreeksen in te sluiten, waardoor het eenvoudig wordt om de URL voor de geselecteerde PDF dynamisch te genereren. Bijvoorbeeld: `https://domein.tld/${jaar}_${maand}_etc.pdf`.
container: "#pspdfkit" Bij de PSPDFKit-initialisatie specificeert de container het HTML-element (op ID) waar de PDF-viewer wordt weergegeven. Dit is essentieel om te bepalen waar de PDF op de pagina wordt weergegeven.

Dynamisch PDF-laden met vervolgkeuzemenu's in Wix

In deze oplossing gebruiken we een paar dropdown-elementen op een Wix-pagina om de URL van een PDF-bestand dat wordt weergegeven in een ingesloten iFrame dynamisch te wijzigen. Dit systeem is vooral handig voor openbare bibliotheken die gemakkelijke toegang willen bieden tot gearchiveerde kranten-pdf's. De kernfunctionaliteit wordt mogelijk gemaakt door JavaScript-berichten, waarmee gebruikersselecties uit de vervolgkeuzelijsten naar de ingesloten PDF-viewer worden verzonden. De PSPDFKit-viewer wordt gebruikt om de PDF's binnen het iFrame weer te geven, en we manipuleren de viewer door de URL te wijzigen op basis van de door de gebruiker gekozen jaar en maand. Dit biedt een gestroomlijnde manier om grote archieven naar boven te halen zonder meerdere statische Wix-pagina's te maken.

De eerste vervolgkeuzelijst selecteert het jaar en de tweede vervolgkeuzelijst selecteert de maand. Wanneer de gebruiker beide selecteert, construeert het systeem de juiste URL voor het overeenkomstige PDF-bestand. De PSPDFKit.load() hierbij staat de methode centraal, omdat deze de nieuwe PDF in het iFrame laadt op basis van de bijgewerkte URL. Deze methode maakt deel uit van de PSPDFKit-bibliotheek, die via een extern script op de pagina is ingesloten. De postBericht() API is ook van cruciaal belang in de alternatieve oplossing, die berichtenuitwisseling tussen de bovenliggende pagina en het iframe mogelijk maakt. Door een bericht met de nieuwe PDF-URL naar het iframe te sturen, wordt de PDF-viewer dynamisch bijgewerkt.

Om ervoor te zorgen dat het script alleen wordt uitgevoerd als de DOM volledig is geladen, gebruiken we de DOMContentGeladen evenement. Dit zorgt ervoor dat de vervolgkeuzelijstelementen en de PSPDFKit-container toegankelijk zijn voor het script. We voegen ook gebeurtenislisteners toe aan elke vervolgkeuzelijst. Wanneer de gebruiker een jaar of maand selecteert, legt de bijbehorende gebeurtenislistener de selectie vast en roept een functie aan om de PDF-viewer opnieuw te laden met de juiste URL. Dit wordt afgehandeld via een eenvoudige functie die sjabloonletterlijke waarden gebruikt om de URL samen te stellen op basis van de geselecteerde waarden in de vervolgkeuzelijsten. Deze methode is niet alleen eenvoudig te implementeren, maar ook zeer modulair, waardoor eenvoudige updates mogelijk zijn als er nieuwe archieven worden toegevoegd.

In de tweede benadering gebruiken we postBericht() om te communiceren tussen de bovenliggende pagina en het iFrame. De bovenliggende pagina luistert naar wijzigingen in de vervolgkeuzelijst en verzendt een bericht met de nieuwe PDF-URL naar het iFrame, dat het bericht ontvangt met behulp van een gebeurtenislistener. Deze methode is handig bij het omgaan met meer geïsoleerde omgevingen waarin het iframe niet rechtstreeks kan communiceren met de DOM van de bovenliggende pagina. Beide methoden bieden efficiënte manieren om de inhoud van een ingebedde PDF-viewer dynamisch bij te werken, waardoor de behoefte aan meerdere statische pagina's wordt verminderd en een gebruiksvriendelijke browse-ervaring wordt geboden.

Implementatie van op vervolgkeuzelijsten gebaseerde URL-wisseling voor PDF Viewer in Wix

Frontend-script met JavaScript en Velo-framework

// 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>

Alternatieve aanpak: PostMessage API gebruiken voor iFrame-communicatie

Frontend-script met postMessage API voor betere isolatie tussen iframe en bovenliggend document

// 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>

Verbetering van de toegankelijkheid van PDF-archief met Wix en JavaScript Messaging

Een andere belangrijke overweging bij het gebruik van dropdown-elementen om een ​​ingesloten PDF-URL in Wix dynamisch te wijzigen, is ervoor te zorgen dat de interactie tussen de iFrame en de hoofdpagina is efficiënt. Hoewel JavaScript-berichten ons in staat stellen gegevens tussen deze twee componenten te verzenden, kunnen de prestaties en de gebruikerservaring worden verbeterd door te optimaliseren hoe de selectie updates activeert. Dit kan worden gedaan door de invoer te debouncen, wat betekent dat het systeem de PDF-viewer pas bijwerkt nadat de gebruiker zijn selectie heeft voltooid, en niet bij elke wijziging.

Een ander aspect dat nog niet aan bod is gekomen is Cross-Original Resource Sharing (CORS). Omdat de PDF's worden gehost op een externe server (zoals Digital Ocean), is het van cruciaal belang om ervoor te zorgen dat de server is geconfigureerd om toegang vanuit het Wix-domein toe te staan. Als de CORS-instellingen van de server niet correct zijn geconfigureerd, kan de PDF-viewer het document mogelijk niet laden, wat tot fouten kan leiden. Goede CORS-headers op de server die de PDF-bestanden host, zijn essentieel voor een naadloze integratie tussen de twee platforms.

Bovendien kunt u het systeem uitbreiden door veelgebruikte PDF-bestanden vooraf te laden om de laadtijden te verkorten. Strategieën voor het vooraf laden zijn handig wanneer de gebruiker waarschijnlijk tussen meerdere maanden of jaren zal wisselen. Door deze bestanden in de cache van de browser op te slaan, zullen de volgende documenten sneller worden geladen, wat een soepelere gebruikerservaring oplevert. Dit kan worden gedaan met behulp van servicemedewerkers of andere cachingmechanismen, die kunnen worden ingesteld om PDF's vooraf te laden terwijl de gebruiker door de beschikbare opties navigeert.

Veelgestelde vragen over dynamische PDF-insluitingen in Wix

  1. Hoe voeg ik de vervolgkeuzelijsten toe in Wix?
  2. U kunt dropdown-elementen toevoegen met behulp van de Wix-editor en JavaScript gebruiken om deze te beheren door unieke ID's toe te wijzen. De vervolgkeuzelijstelementen activeren wijzigingen in de PDF-URL via document.getElementById().
  3. Wat doet de PSPDFKit.load() commando doen?
  4. De PSPDFKit.load() methode is verantwoordelijk voor het renderen van de PDF-viewer en het laden van een specifiek PDF-bestand erin. Deze methode maakt deel uit van de PSPDFKit-bibliotheek die wordt gebruikt om PDF-bestanden dynamisch weer te geven.
  5. Kan ik gebruiken postMessage() voor cross-originele communicatie?
  6. Ja, de postMessage() API is specifiek ontworpen voor communicatie tussen verschillende oorsprongen, zoals tussen een bovenliggende pagina en een iFrame, wat cruciaal is voor deze implementatie.
  7. Hoe ga ik om met fouten bij het laden van een PDF?
  8. U kunt fouten afhandelen door een .catch() blok naar de PSPDFKit.load() functie om eventuele fouten op te sporen die optreden tijdens het laadproces en een passend foutbericht weer te geven.
  9. Moet ik mijn server configureren voor CORS?
  10. Ja, als uw PDF's op een ander domein worden gehost, moet u ervoor zorgen dat de server correct is ingesteld CORS headers om de Wix-site toegang te geven tot de documenten.

Laatste gedachten over dynamische PDF-weergave

Deze oplossing vereenvoudigt het proces van het weergeven van grote archieven met PDF-bestanden op één pagina. Door twee dropdown-elementen te gebruiken voor het selecteren van jaar en maand, kunnen we de PDF-viewer dynamisch bijwerken zonder meerdere Wix-pagina's te maken.

Door de flexibiliteit van het Velo-framework te combineren met JavaScript-berichten tussen vervolgkeuzelijsten en het iFrame, biedt deze methode een efficiënte manier om historische gegevens te organiseren en te presenteren. Het is zowel schaalbaar als gebruiksvriendelijk voor openbare websites zoals bibliotheekarchieven.

Bronnen en referenties voor dynamisch PDF-laden met Wix en JavaScript
  1. Biedt gedetailleerde documentatie over het werken met het HTML iFrame-element en JavaScript-berichten op Wix met behulp van het Velo-framework. Bezoek Wix-ontwikkelaarsdocumentatie voor meer informatie.
  2. De officiële documentatie van PSPDFKit, waarin wordt beschreven hoe u PDF's in een iFrame kunt insluiten en laden met behulp van hun JavaScript-bibliotheek. Bekijk het hier: PSPDFKit-documentatie .
  3. Een handleiding voor het implementeren van cross-origin resource sharing (CORS) om ervoor te zorgen dat PDF's correct worden geladen vanaf externe servers zoals Digital Ocean. U kunt meer lezen op MDN-webdocumenten op CORS .