2011-09-02 66 views
11

QtWebKit在網頁加載失敗時調用QWebPage::loadFinished (false) - 但不知道爲什麼它失敗。QTWebKit無法加載頁面時如何獲取詳細的錯誤信息?

如何獲取詳細的錯誤消息,如HTTP響應代碼或其他消息?

+1

另請參見[如何檢查HTTP狀態代碼] [1] [1]:http://stackoverflow.com/questions/4330274/qtwebkit-how-to-check-http-status-code –

回答

11

原來有幾個方法可以得到關於失敗的更多詳細信息:

  • 頁落實onResourceRequestedonResourceReceived回調:

    page.onResourceRequested = function (resource) { 
        log('resource requested: ' + resource.url); 
    } 
    
    page.onResourceReceived = function (resource) { 
        log('resource received: ' + resource.status + ' ' + resource.statusText + ' ' + 
         resource.contentType + ' ' + resource.url); 
    } 
    
  • 如果你正在尋找更多細節仍然需要修補PhantomJS內部。更新它的CustomPage對象(在WebPage.cpp中)以實現QTWebKit的ErrorExtension。下面是代碼,您可以添加,做的是:

    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; 
    } 
    

這會給你最的錯誤信息,但你仍然可以得到onLoadFinished(success=false)事件沒有得到更多的細節。從我的研究中,主要原因是取消了加載請求。 QTWebKit發送取消失敗通知,但不報告任何細節。

相關問題