PDF.js: 在 iframe 中使用 postMessage 将 base64 传递给 viewer.html
PDF.js: using postMessage to pass base64 to viewer.html in iframe
我正在尝试创建一个迷你应用程序(在 Salesforce 中,尽管这可能不是那么相关),它将 PDF.js 中的开箱即用 viewer.html
嵌入到框架。用户 select 列表中的 PDF,应用检索该 PDF 的 base64 并将其传递给查看器。
有一些工作示例使用了 pre-built PDF.js, including this one that uses version 1.5.188 的过时版本。这些工作示例的作用似乎是:
- Embed the viewer in an iframe and use
postMessage
将 base64 传递给查看器
- 在
viewer.html
中添加了以下脚本来接收和处理消息事件:
<script>
if (window.addEventListener) {
// For standards-compliant web browsers
window.addEventListener("message", handleMessage, false);
} else {
window.attachEvent("onmessage", handleMessage);
}
function handleMessage(evt){
console.log('viewer.html entering handleMessage');
var raw = atob(evt.data);
var uint8Array = new Uint8Array(raw.length);
for (var i = 0; i < raw.length; i++) {
uint8Array[i] = raw.charCodeAt(i);
}
PDFViewerApplication.open(uint8Array);
}
</script>
这在过时版本上运行良好,但是当我将上述脚本添加到最新版本(撰写本文时为 2.5.207)中的 viewer.html
时,没有任何反应。 PDFViewerApplication
仍然存在于 viewer.js
中,并且仍然有一个将文件作为第一个参数的 open
函数。但是当我调用这个函数时,它没有显示我的PDF。
我知道 you can use the file
parameter in the URL 让查看器根据文件路径显示文件。但是我正在从服务器端 REST API 调用中检索这些文件,所以我没有路径,只有 base64。是否有可靠的方法让最新版本的查看器接收和显示 base64?
这原来是浏览器缓存问题。清除缓存给了我最新的 PDF.js 库版本,我能够在查看器中查看 PDF。
我正在尝试创建一个迷你应用程序(在 Salesforce 中,尽管这可能不是那么相关),它将 PDF.js 中的开箱即用 viewer.html
嵌入到框架。用户 select 列表中的 PDF,应用检索该 PDF 的 base64 并将其传递给查看器。
有一些工作示例使用了 pre-built PDF.js, including this one that uses version 1.5.188 的过时版本。这些工作示例的作用似乎是:
- Embed the viewer in an iframe and use
postMessage
将 base64 传递给查看器 - 在
viewer.html
中添加了以下脚本来接收和处理消息事件:
<script>
if (window.addEventListener) {
// For standards-compliant web browsers
window.addEventListener("message", handleMessage, false);
} else {
window.attachEvent("onmessage", handleMessage);
}
function handleMessage(evt){
console.log('viewer.html entering handleMessage');
var raw = atob(evt.data);
var uint8Array = new Uint8Array(raw.length);
for (var i = 0; i < raw.length; i++) {
uint8Array[i] = raw.charCodeAt(i);
}
PDFViewerApplication.open(uint8Array);
}
</script>
这在过时版本上运行良好,但是当我将上述脚本添加到最新版本(撰写本文时为 2.5.207)中的 viewer.html
时,没有任何反应。 PDFViewerApplication
仍然存在于 viewer.js
中,并且仍然有一个将文件作为第一个参数的 open
函数。但是当我调用这个函数时,它没有显示我的PDF。
我知道 you can use the file
parameter in the URL 让查看器根据文件路径显示文件。但是我正在从服务器端 REST API 调用中检索这些文件,所以我没有路径,只有 base64。是否有可靠的方法让最新版本的查看器接收和显示 base64?
这原来是浏览器缓存问题。清除缓存给了我最新的 PDF.js 库版本,我能够在查看器中查看 PDF。