0

我们有一个 ASP 应用程序,人们可以在上面进行测试。在测试页面上,有一个显示剩余时间的asp控件。当您右键单击该控件时,提供时间的 javascript 将被中断。为了解决这个问题,我们禁用了右键单击。但现在我注意到,如果您选择一些文本并单击 IE8 加速器蓝色按钮,javascript 也会中断。禁用左键单击当然是没有选择的。

我在 IE 中找到了一个禁用加速器的选项,所以对于我们内部来说,问题已经解决了。但是我们希望找到另一种解决方案,因为我们不能要求我们的每个用户都在他们的所有计算机上禁用该选项。

我们更喜欢将修复程序集成到代码中的解决方案,以便通过升级程序来解决问题。因此,如果有人知道是否以及如何禁用/绕过/...即加速器...

提前致谢。

编辑

同时使用服务器上的计时器和客户端上的计时器引发了一个新问题:您将在哪里划定服务器和客户端上的时间差之间的界限。无论如何,这个问题到目前为止还没有发生,所以我猜人们太忙于专注于测试然后寻找一种方法来破坏我们的系统。

编辑 2

我尝试使用带有 onSelectStart 的方法,但没有运气。这是我的测试html:

<html xmlns="http://www.w3.org/1999/xhtml" >
<SCRIPT LANGUAGE="JavaScript">
    function showObj() {
        //alert('?');
        return false;
    }
</SCRIPT>
<head>
    <title>Untitled Page</title>
</head>

<body onSelectStart="showObj()">
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. 
        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. 
        Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. 
        Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
    </p>
</body>

4

4 回答 4

3

If you are using a completely client-based timer to actually validate that people submit something in a certain time, cheating will always be possible. Someone can just drop a script on top of your page that kills the timer entirely, no matter what you do.

Seems that you should be using a server clock. If some customer does something that breaks an onscreen timer, well, there's nothing you can do about that. But as long as you validate the time on the server when people submit an answer, it will always be accurate.

于 2011-03-30T10:12:24.250 回答
2

与验证相同,永远不要相信来自客户端的数据。您真正应该做的是在服务器端记录测试开始的时间,然后是测试提交的时间。用户端的时钟应该只是一个精确的,但不能依赖,因为没有办法保证它是准确的(出于上面发布的半个几十个原因)。

几乎无故障的方式是用户在服务器端的某些东西以任何方式都不知道,与最终用户交互或修改。

于 2011-03-31T22:03:12.737 回答
2

看看这篇文章:

为整个站点禁用 IE8 加速器

@EricLaw 说不,您不能为网站禁用它们。

@mbenny 说您可以将内容标记为contentEditableunselectable

于 2011-03-30T14:54:18.390 回答
1

解决方案是禁用选择文本的功能。听起来在您工作的环境中不需要复制+粘贴。

在大多数浏览器中,这是使用 CSS: 完成的user-select: none;(使用适用的浏览器前缀)。

但是,这个 CSS 在 IE 中不可用(虽然我不确定 IE9,所以无论如何它可能值得包含),并且由于您专门询问 IE,您需要一个替代解决方案。幸运的是,IE 确实提供了一个:

<div unselectable="on">...</div>

不幸的是,该属性不是继承的,因此您需要在每个包含文本的元素上指定它。(或者您可以编写一个 Javascript 或 JQuery 函数,在页面加载后将其应用于每个元素)

最后,也可能是最好的选择:还有一种onselectstart方法可以绑定到元素上。这样的事情会禁用文本选择:onselectstart = function(){ return false; }. 更好的是,它应该被子标签继承,所以你可以把它放在你的<body>标签上并完成它。

于 2011-04-07T12:16:36.897 回答