2011-03-30 4 views
0

Nous avons une application ASP sur laquelle les gens peuvent passer des tests. Sur la page de test, il existe un contrôle ASP qui indique le temps restant. Lorsque vous cliquez avec le bouton droit sur ce contrôle, le javascript qui fournit l'heure est interrompu. Pour résoudre cela, nous avons désactivé le clic droit. Mais maintenant, j'ai remarqué que si vous faites une sélection de texte et cliquez sur le bouton bleu de l'accélérateur IE8, le javascript est également interrompu. Désactiver le clic gauche n'est bien sûr pas une option.IE8 accélérateur arrête javascript timer

J'ai trouvé une option dans IE qui désactive l'accélérateur, donc pour nous en interne, le problème est résolu. Mais nous aimerions trouver une autre solution, simplement parce que nous ne pouvons pas demander à tous nos utilisateurs de désactiver cette option sur tous leurs ordinateurs.

Nous préférons une solution que nous intégrons un correctif dans notre code, afin que le problème soit résolu avec une mise à niveau de notre programme. Donc, si quelqu'un sait si et comment il est possible de désactiver/contourner/... Ie accélérateur ...

Merci d'avance.

Modifier

travaillant à la fois une minuterie sur le serveur et l'autre sur le client soulève un nouveau problème: où allez-vous tracer la ligne entre la différence de temps sur le serveur et le client. Quoi qu'il en soit, ce problème n'est pas encore survenu, donc je suppose que les gens sont trop occupés à se concentrer sur le test, puis à trouver un moyen de décomposer notre système.

Edit 2

J'ai essayé d'utiliser la méthode avec onselectstart, mais pas de chance. Ceci est mon html test:

<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- peut encore être fait, tout de même. 2- Un compromis pourrait aider, alors. utilisez les deux fois, et si elles sont proches (pour une certaine valeur de close), utilisez l'une d'entre elles ou faites la moyenne. S'ils sont loin, vous savez que quelque chose est en cours et pour utiliser le serveur. –

Répondre

1

La solution est de désactiver la possibilité de sélectionner du texte. Il ne semble pas que copier + coller soit nécessaire dans l'environnement dans lequel vous travaillez.

Dans la plupart des navigateurs, ceci est fait en utilisant CSS: user-select: none; (avec les préfixes du navigateur selon le cas).

Toutefois, ce CSS n'est pas disponible dans IE (je ne suis pas sûr de IE9 cependant, donc ça peut valoir la peine d'inclure de toute façon), et puisque vous demandez spécifiquement sur IE, vous avez besoin d'une solution alternative. Heureusement, IE ne fournit une:

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

Malheureusement, l'attribut n'est pas hérité, vous aurez donc besoin de le préciser sur chaque élément qui contient du texte. (ou vous pouvez écrire une fonction Javascript ou JQuery qui l'applique à chaque élément une fois la page chargée)

Enfin, et peut-être la meilleure option: Il existe aussi une méthode onselectstart qui peut être liée à un élément. Quelque chose comme ceci désactiverait la sélection de texte: onselectstart = function(){ return false; }. Encore mieux, cela devrait être hérité par les balises enfant, donc vous pouvez simplement le mettre sur votre tag <body> et en avoir fini avec.

+0

"

...
" passe l'attribut aux enfants aussi? – Terry

+0

@djerry: Non, comme je l'ai dit, je crois que ce n'est pas hérité. – Spudley

+0

@djerry: Je suggère d'utiliser 'onselectstart' à la place. – Spudley

3

Si vous utilisez une minuterie complètement basée sur le client pour valider réellement que les gens soumettent quelque chose dans un certain temps, la tricherie sera toujours possible. Quelqu'un peut juste laisser tomber un script sur le dessus de votre page qui tue complètement le minuteur, peu importe ce que vous faites.

Semble que vous devriez utiliser une horloge serveur. Si un client fait quelque chose qui casse une minuterie à l'écran, eh bien, il n'y a rien que vous puissiez faire à ce sujet. Mais tant que vous validez l'heure sur le serveur lorsque les gens soumettent une réponse, elle sera toujours exacte.

+0

les tests sont effectués dans un environnement contrôlé, donc aucun script externe ne peut être utilisé ou aucune autre fenêtre ouverte, donc seulement ce problème rend le "tricher" possible – Terry

+0

Pouvez-vous être sûr que dans chaque environnement, les utilisateurs finaux ne peuvent pas faire des choses Si les clients ont géré la configuration du navigateur (par exemple, c'est toujours IE, toujours une version, pas de plugins, pas de navigation web, etc.) alors je suis d'accord - mais dans ce cas, vos clients devraient pouvoir pour pousser un changement de configuration à désactiver l'accélérateur.Si non, alors, un utilisateur peut toujours faire quelque chose.Je me rends compte que ce problème ne nécessite aucune connaissance particulière et est donc beaucoup plus probable, mais encore, pourquoi ne pas simplement vérifier l'heure au serveur –

+0

Ce projet n'a besoin que de maintenance et de mises à jour mineures Nous ne travaillons pas sur le nettoyage de code, car ce projet existe depuis quelques années et nous mettons en place un nouveau p roject avec de nouvelles technologies qui remplaceront notre projet actuel. Pour le moment, nous ne faisons que résoudre les problèmes. En outre, je peux garantir que rien d'autre ne peut être fait sur les ordinateurs de test sauf le test lui-même, c'est ce que les ordinateurs sont configurés pour faire. – Terry

2

Identique à la validation, jamais données de confiance qui vient du client. Ce que vous devriez vraiment faire est d'enregistrer, du côté du serveur, l'heure à laquelle le test a commencé, et ensuite l'heure à laquelle le test a été soumis. L'horloge sur le côté de l'utilisateur ne devrait être qu'une finesse, mais pas compté sur, car il n'y a aucun moyen de garantir qu'il est précis (pour une demi-douzaine de raisons postées ci-dessus).

La manière presque irréprochable est l'utilisateur quelque chose sur le côté du serveur qui n'est en aucune façon connu, interagi, ou modifiable par l'utilisateur final.

+0

voir mon édition dans la question en réponse à votre et d'autres remarques serveur-client – Terry