增强 Wix 图书馆网站上的 PDF 查看器功能
以有组织且用户友好的方式显示大量 PDF 文件对于改善公共图书馆网站的用户体验至关重要。目标是让访问者能够无缝访问以 PDF 形式存储的历史记录,例如旧报纸。在此项目中,使用 Wix、Velo 和 HTML 嵌入元素为强大的系统奠定了基础。
Wix 的平台支持通过 iframe 嵌入元素,允许用户添加 PDF 查看器等交互式组件。此 PDF 查看器使用 iframe 嵌入,目前,静态 URL 定义显示哪个文档。然而,需要根据用户输入动态更改 PDF 文件对于流畅的体验至关重要。
挑战在于允许用户从两个下拉列表中选择年份和月份,然后触发显示的 PDF 文档的更改。这涉及集成 JavaScript 消息传递以与 iframe 进行通信,从而使文档的 URL 能够根据下拉选项进行更改。
这种方法不仅减少了对大量静态 Wix 页面的需求,还简化了对图书馆 PDF 存档的访问。下面,我们探讨使用 Velo 框架和 JavaScript 实现这一点所需的步骤和解决方案。
命令 | 使用示例 |
---|---|
PSPDFKit.load() | 此方法初始化特定容器内的 PSPDFKit PDF 查看器。它从提供的 URL 加载 PDF 文件,使其可以在嵌入元素中查看。它特定于 PSPDFKit 的 JavaScript 库,该库专为嵌入和查看 PDF 文档而定制。 |
postMessage() | 用于在父窗口和嵌入的 iframe 之间进行通信。在此上下文中,它从主页向 iframe 发送一条消息,允许 iframe 根据下拉选择更新其内容(PDF URL)。 |
window.addEventListener("message") | 该事件监听器添加在 iframe 内,用于监听通过 postMessage() 发送的消息。它处理消息以根据接收到的数据在 iframe 中动态加载新的 PDF 文档。 |
event.data | 在消息事件处理程序中,event.data 包含从父窗口发送的数据。在本例中,它包括要加载到 PSPDFKit 查看器中的所选 PDF 文件的 URL。 |
document.getElementById() | 此 DOM 操作方法通过 ID 检索 HTML 元素。它用于从下拉元素捕获用户输入,允许脚本确定 PDF URL 更新的选定年份和月份。 |
DOMContentLoaded | 确保 JavaScript 仅在 DOM 完全加载后执行的事件。这可以防止在尝试访问 DOM 元素存在之前的错误。 |
addEventListener("change") | 此事件侦听器监视下拉元素的任何更改。当用户选择不同的年份或月份时,会触发该函数更新 PDF URL 并加载相应的文档。 |
template literals | 模板文字(用反引号括起来)允许将变量嵌入到字符串中,从而可以轻松动态生成所选 PDF 的 URL。例如:“https://domain.tld/${year}_${month}_etc.pdf”。 |
container: "#pspdfkit" | 在 PSPDFKit 初始化中,容器指定将在其中呈现 PDF 查看器的 HTML 元素(通过 ID)。这对于定义 PDF 在页面上的显示位置至关重要。 |
在 Wix 中使用下拉选项动态加载 PDF
在此解决方案中,我们在 Wix 页面上使用一对下拉元素来动态修改嵌入 iFrame 中显示的 PDF 文件的 URL。该系统对于希望轻松访问存档报纸 PDF 的公共图书馆特别有用。核心功能由 JavaScript 消息传递,它将用户选择从下拉列表发送到嵌入式 PDF 查看器。 PSPDFKit 查看器用于在 iFrame 内呈现 PDF,我们通过根据用户选择的年份和月份更改 URL 来操作查看器。这提供了一种简化的方式来显示大型档案,而无需创建多个静态 Wix 页面。
第一个下拉列表选择年份,第二个下拉列表选择月份。当用户选择两者时,系统会为相应的 PDF 文件构建适当的 URL。这 PSPDFKit.load() 方法对此至关重要,因为它根据更新的 URL 将新 PDF 加载到 iFrame 中。该方法是 PSPDFKit 库的一部分,通过外部脚本嵌入到页面中。这 发布消息() API 在替代解决方案中也很重要,它允许在父页面和 iframe 之间进行消息传递。通过向 iframe 发送包含新 PDF URL 的消息,PDF 查看器会动态更新。
为了确保脚本仅在 DOM 完全加载时运行,我们使用 DOM内容已加载 事件。这确保了脚本可以访问下拉元素和 PSPDFKit 容器。我们还将事件侦听器添加到每个下拉列表中。当用户选择年份或月份时,相应的事件侦听器会捕获选择并调用函数以使用正确的 URL 重新加载 PDF 查看器。这是通过一个简单的函数来处理的,该函数使用模板文字根据下拉列表中选定的值构造 URL。这种方法不仅易于实现,而且高度模块化,可以在添加新档案时轻松更新。
在第二种方法中,我们使用 发布消息() 父页面和 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>
替代方法:使用 PostMessage API 进行 iFrame 通信
使用 postMessage API 的前端脚本可以更好地隔离 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>
使用 Wix 和 JavaScript 消息传递增强 PDF 存档的可访问性
在 Wix 中使用下拉元素动态修改嵌入的 PDF URL 时的另一个重要考虑因素是确保 框架 并且主页效率很高。虽然 JavaScript 消息传递允许我们在这两个组件之间发送数据,但可以通过优化选择触发更新的方式来提高性能和用户体验。这可以通过对输入进行去抖动来完成,这意味着系统仅在用户完成选择后更新 PDF 查看器,而不是在每次更改时更新。
尚未涉及的另一个方面是 跨域资源共享 (CORS)。由于 PDF 托管在外部服务器(例如 Digital Ocean)上,因此确保服务器配置为允许从 Wix 域进行访问至关重要。如果服务器的 CORS 设置未正确配置,PDF 查看器可能无法加载文档,从而导致错误。托管 PDF 文件的服务器上正确的 CORS 标头对于两个平台之间的无缝集成至关重要。
此外,您可以通过预加载经常访问的 PDF 文件来增强系统,以减少加载时间。当用户可能在几个月或几年之间切换时,预加载策略非常有用。通过将这些文件存储在浏览器的缓存中,后续文档加载将会更快,从而提供更流畅的用户体验。这可以使用服务工作人员或其他缓存机制来完成,可以将其设置为在用户浏览可用选项时预加载 PDF。
有关 Wix 中动态 PDF 嵌入的常见问题
- 如何在 Wix 中添加下拉选择器?
- 您可以使用 Wix 编辑器添加下拉元素,并使用 JavaScript 通过分配唯一 ID 来控制它们。下拉元素将通过以下方式触发 PDF URL 的更改 document.getElementById()。
- 什么是 PSPDFKit.load() 命令做什么?
- 这 PSPDFKit.load() 方法负责渲染 PDF 查看器并将特定的 PDF 文件加载到其中。此方法是 PSPDFKit 库的一部分,用于动态显示 PDF 文件。
- 我可以使用吗 postMessage() 用于跨源通信?
- 是的, postMessage() API 是专门为不同来源之间的通信而设计的,例如父页面和 iFrame 之间的通信,这对于此实现至关重要。
- 加载 PDF 时出现错误如何处理?
- 您可以通过添加一个来处理错误 .catch() 块到 PSPDFKit.load() 函数捕获加载过程中发生的任何错误并显示适当的错误消息。
- 我需要为 CORS 配置服务器吗?
- 是的,如果您的 PDF 托管在不同的域上,您需要确保服务器设置正确 CORS 标头以允许 Wix 站点访问文档。
关于动态 PDF 显示的最终想法
该解决方案简化了在单个页面上显示大型 PDF 文件档案的过程。通过使用两个下拉元素来选择年份和月份,我们可以动态更新 PDF 查看器,而无需创建多个 Wix 页面。
此方法将 Velo 框架的灵活性与下拉列表和 iFrame 之间的 JavaScript 消息传递相结合,提供了一种组织和呈现历史数据的有效方法。对于图书馆档案馆等面向公众的网站来说,它既可扩展又易于使用。
使用 Wix 和 JavaScript 进行动态 PDF 加载的来源和参考
- 提供有关使用 Velo 框架在 Wix 上使用 HTML iFrame 元素和 JavaScript 消息传递的详细文档。访问 Wix 开发者文档 了解更多信息。
- PSPDFKit 的官方文档,详细介绍了如何使用其 JavaScript 库在 iFrame 中嵌入和加载 PDF。在这里访问它: PSPDFKit 文档 。
- 有关实施跨源资源共享 (CORS) 以确保从 Digital Ocean 等外部服务器正确加载 PDF 的指南。您可以阅读更多内容 CORS 上的 MDN Web 文档 。