Расширение функциональности средства просмотра PDF-файлов на сайте библиотеки Wix
Отображение обширного архива PDF-файлов в организованном и удобном для пользователя виде имеет решающее значение для улучшения пользовательского опыта на веб-сайте публичной библиотеки. Цель состоит в том, чтобы предложить посетителям беспрепятственный доступ к историческим записям, таким как старые газеты, которые хранятся в формате PDF. В этом проекте использование Wix, Velo и элемента встраивания HTML создает основу для надежной системы.
Платформа Wix поддерживает встроенные элементы через iframe, позволяя пользователям добавлять интерактивные компоненты, такие как программы просмотра PDF. Эта программа просмотра PDF-файлов встроена с помощью iframe, и в настоящее время статический URL-адрес определяет, какой документ отображается. Однако необходимость динамического изменения PDF-файла на основе пользовательского ввода необходима для бесперебойной работы.
Задача состоит в том, чтобы позволить пользователям выбирать год и месяц из двух раскрывающихся списков, что затем приведет к изменению отображаемого PDF-документа. Это предполагает интеграцию обмена сообщениями JavaScript для связи с iframe, позволяя URL-адресу документа изменяться в соответствии с вариантами раскрывающегося списка.
Такой подход не только снижает потребность в многочисленных статических страницах Wix, но и упрощает доступ к PDF-архиву библиотеки. Ниже мы рассмотрим шаги и решения, необходимые для реализации этого с использованием платформы Velo и JavaScript.
Команда | Пример использования |
---|---|
PSPDFKit.load() | Этот метод инициализирует средство просмотра PDF-файлов PSDFKit внутри определенного контейнера. Он загружает PDF-файл по предоставленному URL-адресу, делая его доступным для просмотра внутри элемента внедрения. Он специфичен для библиотеки JavaScript PSDFKit, которая предназначена для встраивания и просмотра PDF-документов. |
postMessage() | Используется для связи между родительским окном и встроенным iframe. В этом контексте он отправляет сообщение с главной страницы в iframe, позволяя iframe обновлять свое содержимое (URL-адрес PDF) на основе выбора из раскрывающегося списка. |
window.addEventListener("message") | Этот прослушиватель событий добавляется внутри iframe для прослушивания сообщений, отправленных через postMessage(). Он обрабатывает сообщение для динамической загрузки нового PDF-документа в iframe на основе полученных данных. |
event.data | В обработчике событий сообщения event.data содержит данные, отправленные из родительского окна. В этом случае он включает URL-адрес выбранного PDF-файла для загрузки в средство просмотра PSPDFKit. |
document.getElementById() | Этот метод манипуляции DOM извлекает элемент HTML по его идентификатору. Он используется для сбора вводимых пользователем данных из раскрывающихся элементов, позволяя сценарию определить выбранный год и месяц для обновления URL-адреса PDF. |
DOMContentLoaded | Событие, которое гарантирует выполнение JavaScript только после полной загрузки DOM. Это предотвращает ошибки при попытке доступа к элементам DOM до их существования. |
addEventListener("change") | Этот прослушиватель событий отслеживает элементы раскрывающегося списка на предмет любых изменений. Когда пользователь выбирает другой год или месяц, функция срабатывает для обновления URL-адреса PDF и загрузки соответствующего документа. |
template literals | Литералы шаблона (заключенные обратными кавычками) позволяют встраивать переменные в строки, упрощая динамическое создание URL-адреса для выбранного PDF-файла. Например: `https://domain.tld/${year}_${month}_etc.pdf`. |
container: "#pspdfkit" | При инициализации PSPDFKit контейнер указывает элемент HTML (по идентификатору), в котором будет отображаться средство просмотра PDF. Это важно для определения того, где PDF-файл будет отображаться на странице. |
Динамическая загрузка PDF с раскрывающимся списком в Wix
В этом решении мы используем пару раскрывающихся элементов на странице Wix для динамического изменения URL-адреса PDF-файла, отображаемого во встроенном iFrame. Эта система особенно полезна для публичных библиотек, желающих обеспечить легкий доступ к архивным газетным PDF-файлам. Основная функциональность обеспечивается Обмен сообщениями JavaScript, который отправляет выбор пользователя из раскрывающегося списка во встроенную программу просмотра PDF-файлов. Средство просмотра PSPDFKit используется для рендеринга PDF-файлов внутри iFrame, и мы манипулируем средством просмотра, изменяя URL-адрес в зависимости от выбора пользователем года и месяца. Это обеспечивает упрощенный способ работы с большими архивами без создания нескольких статических страниц Wix.
В первом раскрывающемся списке выбирается год, а во втором раскрывающемся списке — месяц. Когда пользователь выбирает оба варианта, система создает соответствующий URL-адрес для соответствующего файла PDF. PSDFKit.load() Этот метод играет центральную роль в этом, поскольку он загружает новый PDF-файл в iFrame на основе обновленного URL-адреса. Этот метод является частью библиотеки PSDFKit, которая внедряется на страницу посредством внешнего скрипта. постСообщение() API также имеет решающее значение в альтернативном решении, которое позволяет обмениваться сообщениями между родительской страницей и iframe. При отправке сообщения, содержащего новый URL-адрес PDF-файла, в iframe средство просмотра PDF-файлов обновляется динамически.
Чтобы гарантировать, что скрипт запускается только тогда, когда DOM полностью загружен, мы используем DOMContentЗагружено событие. Это гарантирует, что элементы раскрывающегося списка и контейнер PSDFKit будут доступны сценарию. Мы также добавляем прослушиватели событий в каждый раскрывающийся список. Когда пользователь выбирает год или месяц, соответствующий прослушиватель событий фиксирует выбор и вызывает функцию для перезагрузки средства просмотра PDF с правильным URL-адресом. Это решается с помощью простой функции, которая использует литералы шаблона для создания URL-адреса из выбранных значений в раскрывающихся списках. Этот метод не только прост в реализации, но и обладает высокой степенью модульности, что позволяет легко обновлять его по мере добавления новых архивов.
Во втором подходе мы используем постСообщение() для связи между родительской страницей и iFrame. Родительская страница прослушивает изменения раскрывающегося списка и отправляет сообщение, содержащее новый URL-адрес PDF, в iFrame, который получает сообщение с помощью прослушивателя событий. Этот метод полезен при работе с более изолированными средами, где iframe не может напрямую взаимодействовать с DOM родительской страницы. Оба метода обеспечивают эффективные способы динамического обновления содержимого встроенной программы просмотра PDF-файлов, уменьшая потребность в нескольких статических страницах и предлагая удобный просмотр.
Реализация переключения URL-адресов на основе раскрывающегося списка для средства просмотра PDF в Wix
Сценарий внешнего интерфейса с использованием 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>
Альтернативный подход: использование API PostMessage для связи iFrame
Сценарий внешнего интерфейса, использующий API postMessage для лучшей изоляции между iframe и родительским документом.
// 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>
Улучшение доступности PDF-архива с помощью Wix и обмена сообщениями JavaScript
Еще одним важным моментом при использовании раскрывающихся элементов для динамического изменения URL-адреса встроенного PDF-файла в Wix является обеспечение того, чтобы взаимодействие между iFrame и главная страница эффективна. Хотя обмен сообщениями JavaScript позволяет нам передавать данные между этими двумя компонентами, производительность и удобство использования можно улучшить за счет оптимизации того, как выбор запускает обновления. Это можно сделать путем устранения дребезга ввода. Это означает, что система обновляет средство просмотра PDF-файлов только после того, как пользователь завершил свой выбор, а не при каждом изменении.
Еще один аспект, который еще не был рассмотрен, — это совместное использование ресурсов между источниками (CORS). Поскольку PDF-файлы размещаются на внешнем сервере (например, Digital Ocean), крайне важно убедиться, что сервер настроен на разрешение доступа из домена Wix. Если параметры CORS сервера настроены неправильно, средство просмотра PDF-файлов не сможет загрузить документ, что приведет к ошибкам. Правильные заголовки CORS на сервере, на котором размещены файлы PDF, необходимы для плавной интеграции между двумя платформами.
Кроме того, вы можете улучшить систему, предварительно загрузив часто используемые PDF-файлы, чтобы сократить время загрузки. Стратегии предварительной загрузки полезны, когда пользователь может переключаться между несколькими месяцами или годами. Сохраняя эти файлы в кеше браузера, последующая загрузка документов будет происходить быстрее, обеспечивая более плавное взаимодействие с пользователем. Это можно сделать с помощью сервисных работников или других механизмов кэширования, которые можно настроить для предварительной загрузки PDF-файлов по мере того, как пользователь перемещается по доступным параметрам.
Часто задаваемые вопросы о встраивании динамических PDF-файлов в Wix
- Как добавить раскрывающиеся списки в Wix?
- Вы можете добавлять раскрывающиеся элементы с помощью редактора Wix и использовать JavaScript для управления ими, назначая уникальные идентификаторы. Элементы раскрывающегося списка будут вызывать изменения в URL-адресе PDF-файла через document.getElementById().
- Что означает PSPDFKit.load() команда делать?
- PSPDFKit.load() Метод отвечает за рендеринг средства просмотра PDF и загрузку в него определенного PDF-файла. Этот метод является частью библиотеки PSDFKit, используемой для динамического отображения PDF-файлов.
- Могу ли я использовать postMessage() для связи между разными источниками?
- Да, postMessage() API специально разработан для связи между различными источниками, например между родительской страницей и iFrame, что имеет решающее значение для этой реализации.
- Как обрабатывать ошибки при загрузке PDF-файла?
- Вы можете обрабатывать ошибки, добавив .catch() блокировать до PSPDFKit.load() Функция для обнаружения любых ошибок, возникающих в процессе загрузки, и отображения соответствующего сообщения об ошибке.
- Нужно ли мне настраивать свой сервер для CORS?
- Да, если ваши PDF-файлы размещены в другом домене, вам необходимо убедиться, что сервер настроен правильно. CORS заголовки, позволяющие сайту Wix получить доступ к документам.
Заключительные мысли о динамическом отображении PDF
Это решение упрощает процесс отображения больших архивов PDF-файлов на одной странице. Используя два раскрывающихся списка для выбора года и месяца, мы можем динамически обновлять программу просмотра PDF-файлов, не создавая несколько страниц Wix.
Сочетая гибкость платформы Velo с обменом сообщениями JavaScript между раскрывающимися списками и iFrame, этот метод обеспечивает эффективный способ организации и представления исторических данных. Он масштабируем и удобен для общедоступных веб-сайтов, таких как библиотечные архивы.
Источники и ссылки для динамической загрузки PDF с помощью Wix и JavaScript
- Содержит подробную документацию по работе с элементом HTML iFrame и обменом сообщениями JavaScript в Wix с использованием платформы Velo. Посещать Документация разработчика Wix для получения дополнительной информации.
- Официальная документация PSDFKit, в которой подробно описано, как встраивать и загружать PDF-файлы в iFrame с помощью библиотеки JavaScript. Доступ к нему здесь: Документация PSDFKit .
- Руководство по реализации совместного использования ресурсов между источниками (CORS) для обеспечения правильной загрузки PDF-файлов с внешних серверов, таких как Digital Ocean. Вы можете прочитать больше на Веб-документы MDN по CORS .