2011-03-30 61 views
0

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

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

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

在此先感谢。

编辑

既具有客户机上的服务器上的定时器和一个工作提出了新的问题:在那里你会画在服务器和客户端上的时间差之间的界线。无论如何,这个问题到目前为止还没有发生,所以我想人们都忙于专注于测试,然后找到一种方法来打破我们的系统。

编辑2

我尝试使用方法与焦点的时候,但没有运气。这是我测试的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> 

+0

1-仍然可以完成,只是相同。那么妥协可能会有所帮助。同时使用两次,如果它们靠近(对于某些关闭值),则可以使用其中一个或将它们平均。如果他们离开了,你知道一些事情正在发生,并使用服务器端。 – 2011-04-01 12:07:55

回答

1

解决方法是禁用选择文本的功能。这听起来不像复制+粘贴在你工作的环境中是必要的。

在大多数浏览器中,这是通过使用CSS:user-select: none;(带有适用的浏览器前缀)完成的。但是,这个CSS在IE中是不可用的(虽然我不确定IE9是什么,所以它可能值得包括),并且因为你具体询问IE,所以你需要一个替代解决方案。幸运的是,IE确实提供了:

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

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

最后,也可能是最佳选项:还有一个onselectstart方法可以绑定到一个元素。类似这样会禁用文本选择:onselectstart = function(){ return false; }。更好的是,应该通过儿童标签继承,所以你可以把它放在你的<body>标签上并加以完成。

+0

...
”是否将属性传递给儿童? – Terry 2011-04-07 14:00:44

+0

@djerry:不,如我所说,我相信它不是遗传的。 – Spudley 2011-04-07 14:25:40

+0

@djerry:我建议使用'onselectstart'来代替。 – Spudley 2011-04-07 14:27:07

3

如果您使用的是完全基于客户端的计时器来实际验证人在一定时间内提交的东西,作弊永远是可能的。无论您做什么,都可以在页面顶部放置一个脚本,完全杀死定时器。

似乎你应该使用服务器时钟。如果某些客户做了某件事情会导致屏幕计时器崩溃,那么对此您无能为力。但只要您在提交答案时验证服务器上的时间,它总是准确的。

+0

测试是在受控环境下进行的,因此不能使用外部脚本,也不能打开任何其他窗口,因此只有此问题可能导致“作弊” – Terry 2011-03-30 10:45:14

+0

您能确定在每种环境中,最终用户都无法做到如浏览器上的访问脚本调试?如果客户有托管浏览器配置(例如,它总是IE,总是一个版本,没有插件,没有网页浏览等),那么我同意 - 但在这种情况下,您的客户应该能够如果没有,那么用户总是可以做些事情,我意识到这个问题不需要特别的知识,因此更有可能,但是,为什么不在服务器上验证时间呢?而不是客户端? – 2011-03-30 10:56:15

+0

这个项目只需要维护和小的更新,因为这个项目已经有好几年了,我们正在设置一个新的p新项目将取代我们目前的项目。所以暂时,我们只是解决问题。 此外,我可以保证除测试本身之外,测试计算机上没有其他任何东西可以完成,这就是计算机配置要做的事情。 – Terry 2011-03-30 11:00:00

2

同验证,这是来自客户端从未信任数据。你应该做的是在服务器端记录测试开始的时间,然后记录测试提交的时间。用户方面的时钟应该只是一个很好的,但不是依靠,因为没有办法保证它是准确的(上面发布了几十个原因)。

接近故障的方式是用户在服务器端的东西,并不以任何方式知道,与最终用户交互或可以修改。

+0

请参阅我的编辑问题作为对您和其他服务器客户端的评论 – Terry 2011-04-01 06:34:16