我正在尝试使用QtWebKit在Qt应用程序中使用SpeedOf.Me API。不幸的是,速度测试似乎无法正常工作。确切地说,当我在WebView中打开http://speedof.me/api/doc/sample_advanced.html并单击开始测试时,然后:
上传测试后,测试结果未更新。在正常情况下,顺序应该是:下载测试,上传测试,然后显示结果。我做错了什么,或者只是Qt WebKit的工作方式?你能建议任何解决方法吗?
由于网址是以下附加代码中的基础,而且我无法多次发布该链接,因此我已将所有http://speedof.me/api/doc/sample_advanced.html替换为__URL__
。
我在WebKit的Qt绑定的所有变体中都得到了这种行为,包括下面的Qt Quick代码(Arch Linux,qml二进制版本1.0,使用Qt版本5.2.1构建),Qt Widgets中的类似代码(同时运行)使用Qt5构建Linux,使用Qt4构建Ubuntu 12.04,在基于Qt的Web浏览器Arora(来自Arch repo)上也是如此。
import QtQuick 2.0
import QtQuick.Controls 1.0
import QtWebKit 3.0
ScrollView {
width: 1280
height: 720
WebView {
id: webview
url: "__URL__"
anchors.fill: parent
onNavigationRequested: {
// detect URL scheme prefix, most likely an external link
var schemaRE = /^\w+:/;
if (schemaRE.test(request.url)) {
request.action = WebView.AcceptRequest;
} else {
request.action = WebView.IgnoreRequest;
// delegate request.url here
}
}
}
}
该脚本在大多数标准Web浏览器上运行正常(我正在测试Chromium,Firefox,Safari),但它在GTK WebKit上运行良好。
from gi.repository import Gtk, WebKit
win = Gtk.Window()
view = WebKit.WebView()
view.load_uri("__URL__")
win.add(view)
win.show_all()
Gtk.main()
(Python 3.4.0,WebKit 2.4.1,模块gi 3.12.1)
我一直在努力解决这个问题,甚至联系了SpeedOf.Me的支持。我想在此发表一些观察结果。
有趣的是,上传测试本身似乎运行良好。这只是错误的顺序,最后是测试结果。但是,SpeedOf.Me支持表明我的浏览器可能缺乏“对AJAX 2级的完全支持”。所以我在这里放了几行来自WebKit Developer的控制台(相同版本,速度测试失败)。根据这里的一些帖子(How can I check if the browser support HTML5 file upload (FormData object)?),他们证明XHR2和AJAX 2级是开启的,不是吗?
> Date: Thu May 15 2014 core.js:8
> Ver: 2.7 core.js:8
> URL: __URL__ core.js:8
> User Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) view Safari/538.1 core.js:8
window.FormData
FormDataConstructor {prototype: FormDataPrototype}
var xhr = new XMLHttpRequest()
undefined
xhr
XMLHttpRequest {readyState: 0, timeout: 0, onloadend: null, withCredentials: false, onloadstart: null…}
('upload' in xhr) && ('onprogress' in xhr)
true
new XMLHttpRequest().upload
XMLHttpRequestUpload {onabort: null, onload: null, onprogress: null, onerror: null, onloadstart: null…}
修改UserAgent不会影响行为。