javascript - 如何禁用 Ctrl+P 和 Ctrl+S?在 ng2-pdfjs-viewer 中。现在任何人都可以使用密钥打印或下载。任何建议将不胜感激
问题描述
我正在使用 ng2-pdfjs-viewer 库在我的 Angular 7 应用程序中显示 pdf。问题是如果打印标志为假,则打印按钮不可见,按预期工作,但用户可以右键单击或使用 CTRL+P 或 CTRL+S 并打印或下载 pdf。我想限制用户使用这些键。我尝试在我的 dom 中使用 JavaScript 方法,但这些方法不起作用,因为 PDFJS 组件重叠。毕竟我试图修改 node_modules 文件夹下的 viewer.js 文件,该文件在我的机器上对我有用,但我们使用的是 Jenkins 构建工具,它使用来自SVN 和我无法将 node_modules 提交给 SVN。Jenkins 在 package.json 的基础上使用来自服务器的库,因此在这种情况下我的修改使用较少。我也尝试了 onBeforePrint 事件,但未调用不知道为什么。请帮我解决这个问题,我们可以如何做。您的帮助将不胜感激。
谢谢。
写下我试图修改 viewer.js 的代码
我的组件中的代码
<mat-dialog-content class="my-2 d-flex justify-content-center px-2">
<div class="w-100 h-100">
<ng2-pdfjs-viewer [download]="isPrintable" (onBeforePrint)="beforePrint()" [print]="isPrintable" *ngIf="pdfContent" [pdfSrc]="pdfContent"></ng2-pdfjs-viewer>
</div>
</mat-dialog-content>
viewer.js 修改
//To disable right click print added by KK on 29/08/2019
window.oncontextmenu = function () {
return false;
}
var hasAttachEvent = !!document.attachEvent;
window.addEventListener('keydown', function (event) {
//code to prevent download and print using CTRL+S and CTRL+P added by KK on 29/08/2019
if ((event.keyCode === 80 || event.keyCode === 83) && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {
//window.print();
if (hasAttachEvent) {
return;
}
event.preventDefault();
if (event.stopImmediatePropagation) {
event.stopImmediatePropagation();
} else {
event.stopPropagation();
}
return;
}
}, false);
// CTRL + P key combinations you want to disable
@HostListener('document:keydown', ['$event']) onKeydownHandler(event: KeyboardEvent) {
if (event.ctrlKey && event.keyCode === 80) {
return false;
}
}
解决方案
推荐阅读
- mysql - FIND_IN_SET 或 SELECT * FROM
- c - 将两个字符从字符串移动到另一个字符串出错
- python - 有没有像 Python 的微型 ORM 这样的 Dapper?
- java - 错误:MainActivity 不是抽象的,并且不会覆盖 FABProgressListener 中的抽象方法 onFABProgressAnimationEnd()
- sql - 尝试在 Excel 中运行 SQL 时,关键字“用户”附近的语法不正确
- react-native - react-native 不使用 startInLoadingState={true} 在 WebView 中呈现远程 PDF
- javascript - 从 Cloud Firebase 获取价值并显示元素取决于 if/else 语句
- dns - google.com 的 DNS 请求在不同的时间返回不同的 a_record,即使名称服务器每次都相同
- python-3.x - 如何在函数中使用 calendar.leapdays() 来返回给定列表中有多少闰年?
- linux - 如何启动将启动另一个 bash 文件的 bash 脚本?