我想写一个使用Webkit作为GUI的Qt应用程序来从服务器获取数据并显示它。 我得到了它在Linux和OS X上没有问题,但在windows下,XMLHttpRequest总是返回状态0,我不知道为什么。 这里是我使用的pyqt代码:
import sys,os from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * app = QApplication(sys.argv) web = QWebView() web.page().settings().setAttribute(QWebSettings.LocalContentCanAccessRemoteUrls,True) path = os.path.abspath(os.path.join(os.path.dirname(__file__),'index.html')) url = "file://localhost/" + path web.load(QUrl(url)) web.show() sys.exit(app.exec_())
这里是HTML HTML / JS我用来testing它:
<!DOCTYPE html> <title>TEST</title> <h1>TEST</h1> <div id="test"></div> <script type="text/javascript"> function t(text) { document.getElementById("test").innerHTML = text } var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if(this.status != 0) t(this.responseText) else t("Status is 0") } xhr.open("GET","https://jeena.net/") xhr.send() </script>
在Linux上,它打开一个带有WebKit视图的新窗口,将html本地index.html文件加载到其中,并呈现显示TEST标题的文件。 之后,它运行XMLHttpRequest代码来获取网站内容,并使用innerHTML将其设置为准备好的div。
在窗口上它加载并显示标题,但是当它运行xhr代码时,状态总是只有0,而且不pipe怎么做都不会改变。
我怎样才能隐藏在Windows上运行的PyQt应用程序的控制台窗口?
我如何在Linux上编译QScintilla和Eric6?
导入vtk时Python DLL导入错误
如何在Python / PyQt中模拟真正的键盘按键?
PyQt:qstyledItemDelegate在QTableView在Windows Vista / 7?
据我了解, LocalContentCanAccessRemoteUrls应该使xhr能够从远程网站上获取内容,即使在Windows上,任何想法,为什么这是行不通的? 我在我的Windows机器和Python v2.7上使用Qt版本4.9.6。
为linux打包python应用程序
QT:外部拖放后的通知
我应该安装什么版本的PyQt(32 vs 64)
在ActiveX小部件中加载PDF
当文本框具有焦点时,在窗口上使用Ctrl + Alt键修饰符行为
我认为有两个简单的尝试来解决这个问题。
我的第一个想法是,它可能是由于跨域请求。 似乎没有简单的方法来禁用QWebkit中的跨域保护。 我从这个stackoverflow问题得到的信息:
QtWebkit同源策略
正如接受的答案所述:
“默认情况下,Qt不会公开方法禁用/白名单相同的来源策略。扩展相同(qwebsecurityorigin.cpp),并能够得到它的工作。
但是既然你已经有了一切在linux和mac上工作,上面可能不是原因。
另一种可能是你没有在你的Qt上启用openssl。 由于我注意到你已经请求了一个https页面,这应该需要openssl。 您可以将页面更改为http,以快速测试这种可能性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。