2009-10-15 8 views
0

J'ai une application Web, dont l'interface utilisateur est écrite en GWT, où pour diverses raisons, j'ai besoin de redimensionner la fenêtre active lorsque le serveur signale des choses. Pour ce faire, j'utilise une fonction JSNI qui utilise resizeTo et tout fonctionne très bien. J'ai fait un petit test et j'ai essayé d'envoyer quelques mises à jour du serveur et j'ai reçu une erreur "Accès refusé" de la commande resizeTo. Après quelques recherches sur google, j'ai découvert que c'était parce que le navigateur est toujours occupé par une autre commande resizeTo et lance une exception à cause de cela. Ma question est de savoir si quelqu'un a un bon moyen de voir si le navigateur est prêt/disponible pour être redimensionné? Une solution de contournement actuelle Je pense, mais je n'aime pas particulièrement, avoir un bloc try { } catch() et si une exception est levée, puis l'attraper et appeler la fonction à nouveau dans le délai d'attente, mais je voudrais avoir une manière plus directe.resizeTo in JS me donne l'erreur "Accès refusé", comment savoir si le navigateur est prêt?

Merci, Itthaï

EDIT: Je pensais à un autre problème cependant, si la mise à jour A et la mise à jour B retour ensemble du serveur et A commence alors que B dort ms X, dans le même temps la mise à jour C est envoyée par le serveur et trouve que A est terminé bien que B ne se soit pas encore réveillé alors C s'exécute et seulement ensuite B ce qui est faux parce que B ne contient pas la taille la plus récente. Avez-vous une idée de solution? Est-ce un problème de condition de course? Merci

+0

Pour votre information: la plupart des navigateurs modernes seront n ot laisser votre redimensionner la fenêtre plus être par défaut. Cela nécessite un changement d'options de sécurité dans le navigateur. – epascarello

+0

Merci, mais je construis un système qui utilisera 'MFC' et envelopper l'objet navigateur Web de IE, ce qui permet cela, donc je suis en clair. – Ittai

Répondre

1

Ittai,

Si j'étais un homme paresseux (et je suis) j'utiliser le redimensionnement de jQuery() car il vous donne un rappel:

http://docs.jquery.com/Events/resize

Vous pouvez faire quelque chose comme

ready = false; 
$(window).resize(function(){ 
    ready = true; 
}); 

Noah

+0

Salut Noah, merci pour la tête sur jquery. Comme j'utilise GWT, la solution pour moi sera probablement d'utiliser gwtquery qui est un clone de jquery pour gwt. J'espère que cela fonctionne. Je pensais à un autre problème: si la mise à jour A et la mise à jour B revenaient ensemble du serveur et A démarre alors que B dort pour X ms, la mise à jour C est envoyée par le serveur et trouve que A est terminé ne s'éveille pas encore à C exécute et seulement alors B ce qui est faux parce que B ne contient pas la taille la plus récente. Avez-vous une idée de solution? Est-ce un problème de condition de course? Merci – Ittai

+1

Oui, en général, je suggère que vous regardez dans les mutex et les sémaphores. Cela peut aider: http://www.developer.com/lang/jscript/article.php/3592016/AJAX-from-Scratch-Implementing-Mutual-Exclusion-in-JavaScript.htm – g33kz0r

Questions connexes