2010-07-19 4 views
0

web_view_crash.pyQWebView - работа с яваскриптом бесконечного циклом

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> 

Я хочу, чтобы исправить это из моего кода Python, не касаясь JavaScript. Могу ли я как-нибудь убить javascript?

Редактировать: Оба файла являются локальными.

ответ

1

sip.delete(page) будет убить объект страницы, останавливая выполнение, то все, что вам нужно сделать после того, как это удалить ссылку на страницу в Python: del page

Вы также можете проверить подклассы WebPage и повторно реализуя shouldInterruptJavaScript(), возможно, убивая вашу страницу, когда она выполняется.

0

??? Это действительно не имеет никакого смысла. Файл Javascript : бесконечный цикл. Вы не можете «убить» код страницы с сервера. Это просто невозможно - особенно, когда браузер застрял в запуске Javascript с поддержкой CPU.

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

+0

Я запускаю локальный javascript. Здесь нет сервера. Я попробовал обновить свой PyQt. После этого я получил всплывающее сообщение, в котором говорилось что-то вроде: «У этого сценария есть проблема, вы хотите его прекратить?» Это предполагает, что есть способ остановить выполнение. Но если я нажму «да», ничего не произойдет ... Хром, похоже, справляется с этим довольно хорошо. Он пытается загружать страницу на одной вкладке, но браузер не перестает отвечать на запросы. Я бы хотел сделать что-то подобное в моем приложении gui. Я просто ищу обходной путь здесь. –

+0

Как вы смотрите на страницу? Если это через браузер, есть сервер, независимо от того, является он локальным или нет. Совершенно невозможно, чтобы ваш код Python вмешивался. – Pointy