IE8加速器停止javascript计时器

时间:2011-03-30 09:03:36

标签: asp.net vb.net internet-explorer-8 accelerator

我们有一个人们可以参加测试的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 个答案:

答案 0 :(得分:3)

如果您使用完全基于客户端的计时器来实际验证人们在特定时间内提交某些内容,则始终可以作弊。无论你做什么,有人都可以在你的页面顶部删除一个完全杀死计时器的脚本。

似乎您应该使用服务器时钟。如果某些客户做了打破屏幕定时器的事情,那么,你无能为力。但只要您在人们提交答案时验证服务器上的时间,它就会始终准确无误。

答案 1 :(得分:2)

看看这篇文章:

Disabling IE8 accelerators for an entire site

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

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

答案 2 :(得分:2)

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

几乎防错的方式是服务器端的用户不会以任何方式知道,与最终用户交互或可由其修改。

答案 3 :(得分:1)

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

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

然而,这个CSS在IE中不可用(我不确定IE9,所以它可能值得包括在内),并且由于你特别询问IE,你需要一个替代解决方案。幸运的是,IE确实提供了一个:

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

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

最后,也许是最好的选择:还有一个onselectstart方法可以绑定到一个元素。这样的事情将禁用文本选择:onselectstart = function(){ return false; }。更好的是,这应该由子标记继承,因此您可以将其放在<body>标记上并完成它。