在QtWebKit和其他绑定和浏览器上SpeedOf.Me API的不同行为

时间:2014-05-27 10:55:07

标签: ajax qtwebkit

我正在尝试使用QtWebKit在Qt应用程序中使用SpeedOf.Me API。不幸的是,速度测试似乎无法正常工作。确切地说,当我在WebView中打开http://speedof.me/api/doc/sample_advanced.html并单击开始测试时,然后:

  1. 下载测试运行良好(SomApi.onProgress with progress.type =“download”)
  2. 然后“测试结果”以合理的下载速度显示,但上传速度非常奇怪(SomApi.onTestCompleted)
  3. 最终上传测试开始(SomApi.onProgress with progress.type =“upload”)
  4. 上传测试后,测试结果未更新。在正常情况下,顺序应该是:下载测试,上传测试,然后显示结果。我做错了什么,或者只是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的支持。我想在此发表一些观察结果。

    已禁用或未实现的XHR2

    有趣的是,上传测试本身似乎运行良好。这只是错误的顺序,最后是测试结果。但是,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字符串

    修改UserAgent不会影响行为。

0 个答案:

没有答案