3

我有一个单页应用程序,在这个应用程序中,我有不同的页面,它们使用 pdf.js 显示不同的 pdf。我一直遇到问题,因为一旦我初始化 pdf.js 一次,它就会为每个不同的实例使用这些设置,或者看起来是这样。

我希望能够在每次访问这些页面时销毁 pdf.js 对象并创建一个新对象。到目前为止,我还没有找到销毁方法,我尝试删除画布对象,关闭 PDFViewerApplication 但我仍然遇到这些问题。

我看到的一些错误是: - 覆盖已注册 -offsetParent 未设置 - 无法滚动

4

1 回答 1

4

最快的答案是您的单页网站可以使用框架。

* { border: 0; margin: 0; padding: 0; overflow: hidden; }
iframe { width: 100%; height: 50%; width: 100vw; height: 50vh; }
<iframe src="http://mozilla.github.io/pdf.js/web/viewer.html"></iframe>
<iframe src="http://mozilla.github.io/pdf.js/web/viewer.html"></iframe>

JavaScript 全局对象将绑定到各自框架的 Window 对象,并且不会相互干扰。

您可以使用 Mozilla 的示例,更改 viewer.js 以从查询变量或位置的哈希组件中提取。使用一些参数(例如?path=document123.pdf或)为框架编写 URL #document123.pdf

如果你需要摧毁一个,你可以摧毁框架。如果您需要操作一个,您可以通过在元素上使用(或)到达框架内部(CORSXSS规则、安全许可...) 。contentWindow(iframe.contentDocument || iframe.contentWindow.document)iframe

如果您无法通过 直接进入contentWindow,您可以构建一个脚本来使用 发送和接收信号postMessage,或者只完成框架脚本中的所有工作。

于 2016-09-28T19:23:35.047 回答