2011-09-02 10 views
11

QtWebKit llama al QWebPage::loadFinished (false) cuando una página web no se pudo cargar, pero no da ninguna pista de por qué falló.Cómo obtener un mensaje de error detallado cuando QTWebKit no puede cargar una página?

¿Cómo obtengo un mensaje de error detallado, como el código de respuesta HTTP u otro mensaje?

+1

Véase también [Cómo comprobar código de estado HTTP] [1] [1]: http://stackoverflow.com/questions/4330274/qtwebkit-how-to-check-http-status-code –

Respuesta

11

Resulta que hay un par de maneras de obtener más detalles acerca de los errores:

  • implementar el onResourceRequested y onResourceReceived devoluciones de llamada en la página:

    page.onResourceRequested = function (resource) { 
        log('resource requested: ' + resource.url); 
    } 
    
    page.onResourceReceived = function (resource) { 
        log('resource received: ' + resource.status + ' ' + resource.statusText + ' ' + 
         resource.contentType + ' ' + resource.url); 
    } 
    
  • Si usted está buscando para obtener más detalles Aún así, necesita parchear las partes internas de PhantomJS. Actualice su objeto CustomPage (en WebPage.cpp) para implementar ErrorExtension de QTWebKit. Aquí es código que puede agregar que hace que:

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

esto le dará la mayor parte de la información de error, pero todavía se puede conseguir onLoadFinished(success=false) eventos sin alcanzar más detalle. De mi investigación, la causa principal de ésos es solicitudes de carga canceladas. QTWebKit envía una notificación de falla para cancelaciones, pero no informa ningún detalle.

Cuestiones relacionadas