JavaScript メッセージングを使用したドロップダウン駆動の PDF URL スイッチングを Wix に統合する

Temp mail SuperHeros
JavaScript メッセージングを使用したドロップダウン駆動の PDF URL スイッチングを Wix に統合する
JavaScript メッセージングを使用したドロップダウン駆動の PDF URL スイッチングを Wix に統合する

Wix ライブラリサイトの PDF ビューア機能を強化する

PDF ファイルの膨大なアーカイブを整理されたユーザーフレンドリーな方法で表示することは、公共図書館の Web サイトでのユーザー エクスペリエンスを向上させるために非常に重要です。目標は、PDF として保存されている古い新聞などの歴史的記録に訪問者がシームレスにアクセスできるようにすることです。このプロジェクトでは、Wix、Velo、および HTML 埋め込み要素を使用して、堅牢なシステムの基盤を作成します。

Wix のプラットフォームは iframe を介した埋め込み要素をサポートしており、ユーザーは PDF ビューアなどのインタラクティブなコンポーネントを追加できます。この PDF ビューアは iframe を使用して埋め込まれており、現在、静的な URL によってどのドキュメントが表示されるかが定義されます。ただし、スムーズなエクスペリエンスを実現するには、ユーザー入力に基づいて PDF ファイルを動的に変更する必要があります。

課題は、ユーザーが 2 つのドロップダウンから年と月を選択できるようにすることです。これにより、表示される PDF ドキュメントが変更されます。これには、iframe と通信するための JavaScript メッセージングの統合が含まれ、ドロップダウンの選択に応じてドキュメントの URL を変更できるようになります。

このアプローチにより、多数の静的な Wix ページの必要性が減るだけでなく、ライブラリの PDF アーカイブへのアクセスも簡素化されます。以下では、Velo フレームワークと JavaScript を使用してこれを実装するために必要な手順とソリューションを検討します。

指示 使用例
PSPDFKit.load() このメソッドは、特定のコンテナ内の PSPDFKit PDF ビューアを初期化します。指定された URL から PDF ファイルをロードし、embed 要素内で表示できるようにします。これは、PDF ドキュメントの埋め込みと表示用に調整された PSPDFKit の JavaScript ライブラリに固有のものです。
postMessage() 親ウィンドウと埋め込み iframe 間の通信に使用されます。このコンテキストでは、メイン ページから iframe にメッセージが送信され、ドロップダウンの選択に基づいて iframe がコンテンツ (PDF URL) を更新できるようになります。
window.addEventListener("message") このイベント リスナーは、postMessage() 経由で送信されたメッセージをリッスンするために iframe 内に追加されます。メッセージを処理して、受信したデータに基づいて新しい PDF ドキュメントを iframe に動的にロードします。
event.data メッセージ イベント ハンドラー内のevent.dataには、親ウィンドウから送信されたデータが含まれています。この場合、PSPDFKit ビューアにロードする選択した PDF ファイルの URL が含まれます。
document.getElementById() この DOM 操作メソッドは、ID によって HTML 要素を取得します。これはドロップダウン要素からユーザー入力をキャプチャするために使用され、スクリプトが PDF URL 更新のために選択された年と月を決定できるようにします。
DOMContentLoaded DOM が完全にロードされた後にのみ JavaScript が実行されるようにするイベント。これにより、DOM 要素が存在する前にアクセスしようとしたときのエラーが防止されます。
addEventListener("change") このイベント リスナーは、ドロップダウン要素の変更を監視します。ユーザーが別の年または月を選択すると、関数がトリガーされて PDF URL が更新され、対応するドキュメントがロードされます。
template literals テンプレート リテラル (バッククォートで囲まれたもの) を使用すると、変数を文字列に埋め込むことができ、選択した PDF の URL を動的に生成することが簡単になります。例: 「https://domain.tld/${年}_${月}_etc.pdf」。
container: "#pspdfkit" PSPDFKit の初期化では、コンテナーは PDF ビューアーがレンダリングされる HTML 要素を (ID によって) 指定します。これは、PDF がページ上のどこに表示されるかを定義するために不可欠です。

Wix のドロップダウン選択による動的 PDF 読み込み

このソリューションでは、Wix ページのドロップダウン要素のペアを使用して、埋め込み iFrame 内に表示される PDF ファイルの URL を動的に変更します。このシステムは、アーカイブされた新聞 PDF に簡単にアクセスできるようにしたいと考えている公共図書館に特に役立ちます。コア機能を支えるのは、 JavaScript メッセージング、ドロップダウンからユーザーの選択内容が埋め込み PDF ビューアに送信されます。 PSPDFKit ビューアは iFrame 内で PDF をレンダリングするために使用され、ユーザーが選択した年と月に基づいて URL を変更することでビューアを操作します。これにより、複数の静的な Wix ページを作成せずに大規模なアーカイブを表示する合理的な方法が提供されます。

最初のドロップダウンでは年を選択し、2 番目のドロップダウンでは月を選択します。ユーザーが両方を選択すると、システムは対応する PDF ファイルに適切な URL を構築します。の PSPDFKit.load() このメソッドは更新された URL に基づいて新しい PDF を iFrame にロードするため、このメソッドの中心となります。このメソッドは PSPDFKit ライブラリの一部であり、外部スクリプトを通じてページに埋め込まれます。の postMessage() API は、親ページと iframe 間のメッセージングを可能にする代替ソリューションでも重要です。新しい PDF URL を含むメッセージを iframe に送信することにより、PDF ビューアが動的に更新されます。

DOM が完全にロードされた場合にのみスクリプトが実行されるようにするには、 DOMコンテンツロード済み イベント。これにより、ドロップダウン要素と PSPDFKit コンテナがスクリプトから確実にアクセスできるようになります。各ドロップダウンにイベント リスナーも追加します。ユーザーが年または月を選択すると、対応するイベント リスナーが選択内容をキャプチャし、正しい URL で PDF ビューアを再ロードする関数を呼び出します。これは、テンプレート リテラルを使用してドロップダウンで選択された値から URL を構築する単純な関数を通じて処理されます。この方法は実装が簡単なだけでなく、高度にモジュール化されているため、新しいアーカイブが追加されたときに簡単に更新できます。

2 番目のアプローチでは、次を使用します。 postMessage() 親ページと iFrame の間で通信します。親ページはドロップダウンの変更をリッスンし、新しい PDF URL を含むメッセージを iFrame に送信し、iFrame はイベント リスナーを使用してメッセージを受信します。この方法は、iframe が親ページの DOM と直接対話できない、より分離された環境を扱う場合に便利です。どちらの方法も、埋め込み PDF ビューアのコンテンツを動的に更新する効率的な方法を提供し、複数の静的ページの必要性を減らし、ユーザー フレンドリーなブラウジング エクスペリエンスを提供します。

Wix で PDF ビューアーにドロップダウンベースの URL スイッチングを実装する

JavaScript と Velo フレームワークを使用したフロントエンド スクリプト

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

代替アプローチ: iFrame 通信に PostMessage API を使用する

iframe と親ドキュメント間の分離を強化するための postMessage API を使用したフロントエンド スクリプト

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

Wix と JavaScript メッセージングによる PDF アーカイブのアクセシビリティの強化

Wix でドロップダウン要素を使用して埋め込み PDF URL を動的に変更する場合のもう 1 つの重要な考慮事項は、 iFrame そしてメインページは効率的です。 JavaScript メッセージングを使用すると、これら 2 つのコンポーネント間でデータを送信できますが、選択内容による更新のトリガー方法を最適化することで、パフォーマンスとユーザー エクスペリエンスを向上させることができます。これは、入力をデバウンスすることで実行できます。つまり、システムは、変更のたびではなく、ユーザーが選択を完了した後にのみ PDF ビューアを更新します。

まだカバーされていないもう 1 つの側面は、 クロスオリジンリソース共有 (CORS)。 PDF は外部サーバー (Digital Ocean など) でホストされているため、Wix ドメインからのアクセスを許可するようにサーバーが設定されていることを確認することが重要です。サーバーの CORS 設定が正しく構成されていない場合、PDF ビューアはドキュメントをロードできず、エラーが発生する可能性があります。 PDF ファイルをホストするサーバー上の適切な CORS ヘッダーは、2 つのプラットフォーム間のシームレスな統合に不可欠です。

さらに、頻繁にアクセスする PDF ファイルをプリロードしてロード時間を短縮することでシステムを強化できます。プリロード戦略は、ユーザーが複数の月または年を切り替える可能性がある場合に役立ちます。これらのファイルをブラウザのキャッシュに保存すると、その後のドキュメントの読み込みが速くなり、よりスムーズなユーザー エクスペリエンスが提供されます。これは、Service Worker または他のキャッシュ メカニズムを使用して実行でき、ユーザーが利用可能なオプションをナビゲートするときに PDF をプリロードするように設定できます。

Wix のダイナミック PDF 埋め込みに関するよくある質問

  1. Wix にドロップダウン セレクターを追加するにはどうすればよいですか?
  2. Wix エディターを使用してドロップダウン要素を追加し、JavaScript を使用して一意の ID を割り当てることでドロップダウン要素を制御できます。ドロップダウン要素は、PDF URL の変更をトリガーします。 document.getElementById()
  3. は何ですか PSPDFKit.load() コマンドを実行しますか?
  4. PSPDFKit.load() メソッドは、PDF ビューアをレンダリングし、特定の PDF ファイルをそこにロードします。このメソッドは、PDF ファイルを動的に表示するために使用される PSPDFKit ライブラリの一部です。
  5. 使ってもいいですか postMessage() クロスオリジン通信用?
  6. はい、 postMessage() API は、親ページと iFrame の間など、異なるオリジン間で通信するために特別に設計されており、これはこの実装にとって重要です。
  7. PDF をロードする際のエラーはどのように処理すればよいですか?
  8. を追加することでエラーを処理できます。 .catch() へのブロック PSPDFKit.load() ロード処理中に発生するエラーを捕捉し、適切なエラー メッセージを表示する機能。
  9. サーバーを CORS 用に構成する必要がありますか?
  10. はい、PDF が別のドメインでホストされている場合は、サーバーが適切な環境でセットアップされていることを確認する必要があります。 CORS ヘッダーを使用して、Wix サイトがドキュメントにアクセスできるようにします。

動的 PDF 表示に関する最終的な考え

このソリューションにより、PDF ファイルの大きなアーカイブを 1 ページに表示するプロセスが簡素化されます。年と月を選択する 2 つのドロップダウン要素を使用することで、複数の Wix ページを作成せずに PDF ビューアを動的に更新できます。

Velo フレームワークの柔軟性とドロップダウンと iFrame 間の JavaScript メッセージングを組み合わせたこの方法は、履歴データを整理して表示する効率的な方法を提供します。図書館アーカイブなどの一般向け Web サイトにとって、スケーラブルで使いやすいものです。

Wix と JavaScript を使用した動的 PDF 読み込みのソースとリファレンス
  1. Velo フレームワークを使用した Wix での HTML iFrame 要素と JavaScript メッセージングの操作に関する詳細なドキュメントを提供します。訪問 Wix 開発者ドキュメント 詳細については。
  2. PSPDFKit の公式ドキュメント。JavaScript ライブラリを使用して iFrame 内に PDF を埋め込み、ロードする方法が詳しく説明されています。ここからアクセスしてください: PSPDFKit ドキュメント
  3. Digital Ocean などの外部サーバーから PDF を適切に読み込むためのクロスオリジン リソース共有 (CORS) の実装に関するガイド。詳細については、次のサイトで読むことができます CORS に関する MDN Web ドキュメント