我从下面的互联网上获得了一些代码,并将其用于我正在做的模拟考试应用程序。 这是为了防止人们打印屏幕,从考试页面复制或剪切。 该代码在Internet Explorer中运行良好,但在其他浏览器中不起作用。 我需要帮助使下面的代码在其他浏览器中工作,以避免在模拟考试期间在网站上作弊。下面是代码:
<script type="text/javascript">
function AccessClipboardData() {
try {
window.clipboardData.setData('text', "No print data");
} catch (err) {
txt = "There was an error on this page.nn";
txt += "Error description: " + err.description + "nn";
txt += "Click OK to continue.nn";
alert(txt);
}
}
setInterval("AccessClipboardData()", 300);
document.onkeydown = function (ev) {
var a;
ev = window.event;
if (typeof ev == "undefined") {
alert("PLEASE DON'T USE KEYBORD");
}
a = ev.keyCode;
alert("PLEASE DON'T USE KEYBORD");
return false;
}
document.onkeyup = function (ev) {
var charCode;
if (typeof ev == "undefined") {
ev = window.event;
alert("PLEASE DON'T USE KEYBORD");
} else {
alert("PLEASE DON'T USE KEYBORD");
}
return false;
}
请注意,完全不可能阻止用户从javascript复制或截屏您的网站,看看他们如何简单地禁用js或您的函数,特别是在评论中已经提到的那样。
如果你只是想尽可能地劝阻人们,你仍然可以使用你的代码,但是window.clipboardData.setData仅适用于IE,所以你会在其他浏览器中收到错误消息并不奇怪,为此你必须使用execCommand以你设定的时间间隔将设置的消息复制到剪贴板
。documnet.execCommand(delete, false, null)
删除当前所选内容,然后
documnet.execCommand(copy, false, null)
复制当前选定的文本(您刚刚确保什么都没有)
(有关 execCommand https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand 的更多信息)
这应该在Firefox,Safari和Chrome中工作,我知道在Opera中没有办法做到这一点,因为这两个命令都无法在该浏览器中工作
但请注意,只要网站在浏览器中打开,这就会不断覆盖您的剪贴板,因此即使有人试图完全复制其他内容,他们也无法。
我想指出的是,我提供此功能只是为了向您展示您的代码存在什么问题,因为如果不让人们在他们的计算机上安装第三方权限管理软件,您将永远无法完全做您想做的事情。
我在 Stackoverflow 中找到了以下代码,由 iDhavalVaja 提供,它工作正常。
<script type="text/javascript">
$(function () {
$(this).bind("contextmenu", function (e) {
e.preventDefault();
});
});
</script>
<script type="text/JavaScript">
function killCopy(e) { return false }
function reEnable() { return true }
document.onselectstart = new Function("return false");
if (window.sidebar) {
document.onmousedown = killCopy;
document.onclick = reEnable;
}
</script>
如果你只是想在其他浏览器中工作,也许可以使用jQuery(像这样):
$(document).keydown(function (e) {
alert("PLEASE DON'T USE KEYBORD");
});