2010-07-19 7 views
0

web_view_crash.pyQWebView - traitant javascript boucle infinie

import sys 

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 

app = QApplication(sys.argv) 
view = QWebView() 
view.settings().setAttribute(QWebSettings.JavascriptEnabled, True) 
view.load(QUrl('infinite_loop.html')) 
view.show() 
app.exec_() 

infinite_loop.html

<script> 
    while(true) { 
     document.write('infinite loop...')} 
</script> 

Je veux résoudre ce problème de mon code python, sans toucher le javascript. Puis-je tuer le javascript en quelque sorte?

Modifier: Les deux fichiers sont locaux.

Répondre

1

sip.delete(page) tueront l'objet page, arrêter l'exécution, tout ce que vous devez faire après cela est de supprimer la référence à la page en Python: del page

Vous pouvez également consulter subclassing WebPage et réémergentes mettre en œuvre shouldInterruptJavaScript(), peut-être tuer votre page quand il s'exécute.

0

??? Cela n'a vraiment aucun sens. Le fichier Javascript est une boucle infinie. Vous ne pouvez pas "tuer" le code de la page du serveur. C'est juste impossible - en particulier lorsque le navigateur est bloqué en cours d'exécution liée au processeur Javascript.

Peut-être que ce fichier Javascript a été fourni à titre d'exemple, mais cela n'a pas vraiment d'importance. Si vous savez que vous avez une page cassée de cette façon, vous devez corriger la page.

+0

Je cours en local javascript. Il n'y a pas de serveur ici. J'ai essayé de mettre à jour mon PyQt. Après avoir fait cela, j'ai reçu un message contextuel disant quelque chose comme "Ce script semble avoir un problème, voulez-vous le terminer?" Cela suggère qu'il y a un moyen d'arrêter l'exécution. Mais si je clique sur oui, rien ne se passe ... Chrome semble gérer cela plutôt bien. Il continue à essayer de charger la page dans un onglet, mais le navigateur ne cesse de répondre. Je voudrais faire quelque chose comme ça dans mon application gui. Je cherche juste une solution de contournement ici. –

+0

Comment regardez-vous la page? Si c'est via un navigateur, il y a un serveur, qu'il soit local ou non. Il n'est absolument pas possible que votre code Python intervienne. – Pointy