2011-09-02 23 views
11

QtWebKit gọi QWebPage::loadFinished (false) khi trang web không tải được - nhưng không cho biết nguyên nhân tại sao nó không thành công.Làm thế nào để có được thông báo lỗi chi tiết khi QTWebKit không tải được một trang?

Làm cách nào để nhận được thông báo lỗi chi tiết, như mã phản hồi HTTP hoặc tin nhắn khác?

+1

Cũng xem [Cách kiểm tra mã trạng thái HTTP] [1] [1]: http://stackoverflow.com/questions/4330274/qtwebkit-how-to-check-http-status-code –

Trả lời

11

Hóa ra có một vài cách để có được chi tiết thêm về thất bại:

  • Thực hiện onResourceRequestedonResourceReceived callbacks trên trang:

    page.onResourceRequested = function (resource) { 
        log('resource requested: ' + resource.url); 
    } 
    
    page.onResourceReceived = function (resource) { 
        log('resource received: ' + resource.status + ' ' + resource.statusText + ' ' + 
         resource.contentType + ' ' + resource.url); 
    } 
    
  • Nếu bạn đang tìm kiếm chi tiết hơn vẫn còn, bạn cần phải vá PhantomJS internals. Cập nhật đối tượng CustomPage của nó (trong WebPage.cpp) để triển khai ErrorExtension của QTWebKit. Đây là mã bạn có thể thêm nào đó:

    protected: 
        bool supportsExtension(Extension extension) const { 
        if (extension == QWebPage::ErrorPageExtension) 
        { 
         return true; 
        } 
        return false; 
    } 
    
    bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0) 
    { 
        if (extension != QWebPage::ErrorPageExtension) 
         return false; 
    
        ErrorPageExtensionOption *errorOption = (ErrorPageExtensionOption*) option; 
        std::cerr << "Error loading " << qPrintable(errorOption->url.toString()) << std::endl; 
        if(errorOption->domain == QWebPage::QtNetwork) 
         std::cerr << "Network error (" << errorOption->error << "): "; 
        else if(errorOption->domain == QWebPage::Http) 
         std::cerr << "HTTP error (" << errorOption->error << "): "; 
        else if(errorOption->domain == QWebPage::WebKit) 
         std::cerr << "WebKit error (" << errorOption->error << "): "; 
    
        std::cerr << qPrintable(errorOption->errorString) << std::endl; 
    
        return false; 
    } 
    

này sẽ cung cấp cho bạn hầu hết các thông tin lỗi, nhưng bạn vẫn có thể nhận onLoadFinished(success=false) sự kiện mà không nhận được chi tiết hơn. Từ nghiên cứu của tôi, nguyên nhân chính của số này là đã hủy các yêu cầu tải. QTWebKit gửi thông báo không thành công để hủy, nhưng không báo cáo bất kỳ chi tiết nào.

Các vấn đề liên quan