正确阅读问题后更新答案:
“访问 Angular 应用程序中的对象”可能意味着很多事情——但基本上我能想到的每个场景都围绕着调用 Angular 组件或服务中的方法,并让 Angular 的变更检测知道它。
首先,您需要添加一个onclick
调用 Angular 方法的处理程序。您可以通过注册(textLayerRendered)
并使用它来修改由 pdf.js 呈现的 HTML 代码来做到这一点。除其他外,它还包含您的特殊file://
链接。添加一个onclick
调用您的 Angular 方法的处理程序。
接下来,您遇到了调用 Angular 方法的问题,但在 Angular 上下文之外。为了解决这个问题,NgZone
注入了。像这样实现你想在 Angular 中运行的代码:
public onCustomLinkClick(link): void {
zone.run(() => {
// put your custom code here
});
}
这应该够了吧。请注意,我还没有尝试过源代码,但我很快就会在展示中添加一个工作演示。
涵盖如何访问传统file://
URL 的原始答案:
恐怕您遇到的问题不是 ngx-extended-pdf-viewer 的错。这是一般浏览器应用程序的问题。如果您能够以编程方式打开用户硬盘上的文件,那么您可能能够读取他们的所有文件。实际上,在互联网还年轻的时候,存在可以读取任意本地文件的漏洞。
现在想象你是一个黑客,试图窃取一些敏感数据。编写一个读取任意本地文件的浏览器应用程序对您来说是天赐之物!这就是为什么每个当代浏览器都竭尽全力禁止这种访问的原因。
有一个例外:如果用户同意,您可以访问本地文件。为此,用户必须使用拖放或使用“文件打开”对话框。
长话短说:只要你正在编写一个在浏览器中运行的应用程序,你就不走运了。如果您正在使用 Electron 或 Cordova 编写应用程序,我有一个好消息要告诉您:在这样的环境中,有一个开放的票可以消除限制(https://github.com/stephanrauh/ngx-extended-pdf-查看器/问题/938)。我什至给了它很高的优先级,所以这个功能可能很快就会出现。