IE8 ускоритель останавливает таймер JavaScript - PullRequest
0 голосов
/ 30 марта 2011

У нас есть приложение asp, в котором люди могут сдавать тесты.На тестовой странице есть элемент управления asp, который показывает оставшееся время.Когда вы щелкаете правой кнопкой мыши по этому элементу управления, JavaScript, который обеспечивает время, прерывается.Чтобы решить это, мы отключили щелчок правой кнопкой мыши.Но теперь я заметил, что если вы сделаете выделение некоторого текста и нажмете синюю кнопку ускорителя IE8, JavaScript также будет прерван.Отключение левой кнопки мыши, конечно, не вариант.

Я нашел вариант в IE, который отключает ускоритель, поэтому для нас внутренне проблема решена.Но мы хотели бы найти другое решение, просто потому, что мы не можем просить каждого из наших пользователей отключить эту опцию на всех своих компьютерах.

Мы предпочитаем решение, которое включает в себя исправление в нашем коде, поэтому проблема решается с помощью обновления нашей программы.Так что если кто-нибудь знает, если и как можно отключить / обойти / ... Т.е. ускоритель ...

Заранее спасибо.

Редактировать

Работа как с таймером на сервере, так и с таймером на клиенте поднимает новую проблему: где вы проведете границу между разницей во времени на сервере и клиенте.В любом случае, до сих пор эта проблема не возникала, поэтому я думаю, что люди слишком заняты, концентрируясь на тесте, а затем на поиске способа сломать нашу систему.

Edit 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 ]

3 голосов
/ 30 марта 2011

Если вы используете полностью клиентский таймер для фактической проверки того, что люди отправляют что-то в определенное время, обман всегда будет возможен. Кто-то может просто поместить скрипт поверх вашей страницы, который полностью убивает таймер, независимо от того, что вы делаете.

Похоже, вы должны использовать серверные часы. Если какой-то клиент делает что-то, что нарушает экранный таймер, вы ничего не можете с этим поделать. Но пока вы проверяете время на сервере, когда люди отправляют ответ, оно всегда будет точным.

2 голосов
/ 01 апреля 2011

То же, что и проверка, никогда доверять данным, полученным от клиента.Что вы действительно должны делать, так это записывать на стороне сервера время начала теста, а затем время его отправки.Часы на стороне пользователя должны быть только изящными, но не , на которые можно положиться , поскольку нет способа гарантировать их точность (по полдюжине причин, указанных выше).

Почтиотказоустойчивым способом является то, что пользователь на стороне сервера не знает, не взаимодействует и не модифицируется конечным пользователем.

2 голосов
/ 30 марта 2011

Проверьте это сообщение:

Отключение ускорителей IE8 для всего сайта

@ EricLaw говорит: нет, их нельзя отключить для сайта.

@ mbenny говорит, что вы можете пометить контент как contentEditable или unselectable

1 голос
/ 07 апреля 2011

Решение состоит в том, чтобы отключить возможность выделения текста.Это не похоже на то, что копирование + вставка будут необходимы в среде, в которой вы работаете.

В большинстве браузеров это делается с помощью CSS: user-select: none; (с префиксами браузера, если применимо).

Однако этот CSS недоступен в IE (хотя я не уверен насчет IE9, хотя, в любом случае, его стоит включить), и, поскольку вы специально спрашиваете об IE, вам нужно альтернативное решение,К счастью, IE предоставляет один:

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

К сожалению, атрибут не наследуется, поэтому его нужно указывать для каждого элемента, который содержит текст.(или вы можете написать функцию Javascript или JQuery, которая применяет ее к каждому элементу после загрузки страницы)

Наконец, и, возможно, лучший вариант: есть также метод onselectstart, который можно привязать к элементу,Примерно так будет отключено выделение текста: onselectstart = function(){ return false; }.Более того, это должно наследоваться дочерними тегами, чтобы вы могли просто поместить его в свой тег <body> и покончить с ним.

...