QWebView - 处理JavaScript无限循环

0 投票
2 回答
1026 浏览
提问于 2025-04-16 01:32

web_view_crash.py

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的运行呢?

补充说明:这两个文件都是在本地的。

2 个回答

0

??? 这真是没道理。这个Javascript文件实际上是一个无限循环。你无法从服务器“杀死”页面的代码。这根本不可能——尤其是当浏览器被卡在运行占用CPU的Javascript时。

也许这个Javascript文件只是作为一个示例提供的,但这并不重要。如果你知道你的页面是这样坏掉的,那你就得修复这个页面。

1

sip.delete(page) 这个命令会把页面对象给删除掉,这样就会停止这个页面的执行。之后你只需要在Python里删除对这个页面的引用,也就是用 del page

你可能还想看看如何继承WebPage这个类,并重新实现 shouldInterruptJavaScript() 这个方法,或许可以在页面执行的时候把它给杀掉。

撰写回答