2011-09-02 2 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 내부를 패치해야합니다. WebPage.cpp의 CustomPage 개체를 업데이트하여 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은 취소에 대한 실패 알림을 보내지 만 세부 사항은보고하지 않습니다.

관련 문제