IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Moteurs Web Discussion :

ErrorPageExtension non gérée [Qt WebKit]


Sujet :

Moteurs Web

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Points : 73
    Points
    73
    Par défaut ErrorPageExtension non gérée
    Bonjour,

    Je suis en train de devoir développer un petit navigateur en Qt et je dois pouvoir gérer les erreurs. J'arrive bien à savoir s'il y a une un problème grâce au signal loadFinished(bool) qui indique si la page a fini correctement ou à cause d'une erreur. Mais pour savoir qu'elle a été l'erreur, si j'ai bien compris je devrai utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bool QWebPage::extension ( Extension extension, const ExtensionOption * option = 0, ExtensionReturn * output = 0 )
    avec comme extension ErrorPageExtension mais quand je teste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    page()->supportsExtension(QWebPage::ErrorPageExtension);
    cela me retourne false et donc signifie que QWebPage::ErrorPageExtension n'est pas supportée.

    Donc j'aimerai savoir comment je pourrai activer la gestion de cette extension ?

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Points : 71
    Points
    71
    Par défaut
    Il faut dériver QWebPage et redéfinir les 2 méthodes virtuelles que tu as trouvées.
    Lis le source qwebpage.cpp, dans le répertoire src/3rdparty/webkit/WebKit/qt/Api de Qt, pour voir comment l'autre extension, ChooseMultipleFilesExtension, est implémentée.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Merci Alexisdm. Mais ca m'arrange pas cette histoire car, dans un premier temps, j'ai besoin de savoir si l'erreur est du à une erreur de connexion (proxy non-configuré) ou à une interruption du à l'utilisateur. Mais là, même en redéfinissant QWebPage je ne vois pas comment récupérer cette info

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Points : 71
    Points
    71
    Par défaut
    L'interruption utilisateur génère un appel à QWebPage::triggerAction avec comme paramètre QWebPage::Stop, et les erreurs génèrent des appels à QWebPage::extension, avec le type d'erreur dans le paramètre option.
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #ifndef WEBPAGE_H
    #define WEBPAGE_H
     
    #include <QWebPage>
     
    class WebPage : public QWebPage
    {
        Q_OBJECT    
    public:
        explicit WebPage(QObject *parent = 0);
     
        bool extension(Extension extension, const ExtensionOption *option, ExtensionReturn *output);
        void triggerAction(WebAction action, bool checked);
        bool supportsExtension(Extension extension) const;    
    };
     
    #endif // WEBPAGE_H
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include "webpage.h"
     
    WebPage::WebPage(QObject *parent) :
        QWebPage(parent)
    {
    }
     
    bool WebPage::extension(Extension extension, const ExtensionOption *option,
                            ExtensionReturn *output)
    {
        if (extension != QWebPage::ErrorPageExtension)
            return QWebPage::extension(extension, option, output);
        const ErrorPageExtensionOption *option2 =
            static_cast<const ErrorPageExtensionOption*>(option);
        // Traitement de l'erreur
        // ...
     
        // Si tu veux juste recevoir l'erreur, sans l'afficher en tant que page
        // return false;
     
        // Sinon
        ErrorPageExtensionReturn *output2 =
            static_cast<ErrorPageExtensionReturn*>(output);
        // Change l'url qui sera affichée au dessus de l'erreur
        output2->baseUrl = option2->url;
        // Renvoie le html à afficher pour indiquer l'erreur
        output2->content = QString(
                               "<html>"
                               "  <head>"
                               "    <title>%1 - %2</title>"
                               "  </head>"
                               "  <body>"
                               "    <h1>Erreur</h1>"
                               "    <p>%1</p>"
                               "    <p>Url: %2</p>"
                               "  </body>"
                               "</html>")
                           .arg(option2->errorString)
                           .arg(option2->url.toString()).toUtf8();
        return true;
    }
     
    bool WebPage::supportsExtension(Extension extension) const
    {
        if(extension != QWebPage::ErrorPageExtension)
            return QWebPage::supportsExtension(extension);
        return true;
    }
     
    void WebPage::triggerAction(WebAction action, bool checked)
    {
        QWebPage::triggerAction(action, checked);
        if(action == QWebPage::Stop) {
            // Traitement de l'interruption par l'utilisateur
            // ...
        }
    }
    Et pour avoir un WebPage dans ton QWebView au lieu de QWebPage, tu utilises QWebView::setPage lors de la création du QWebView.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Euhhh comment dirai-je : alexisdm, je t'aime.

    Je te remercie pour ton aide, je teste tout ca demain et je te dit si ca marche.

    Encore merci.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Il y a quand même un point que je trouve pas terrible, c'est que par l'intermédiaire de ErrorPageExtensionReturn on ne puisse pas remonter un code d'erreur de type enum et que l'on soit obligé de transformer un enum en QString pour pouvoir le remonter via ErrorPageExtensionReturn::contentType.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 47
    Points : 71
    Points
    71
    Par défaut
    Le but de ErrorPageExtensionReturn est d'afficher l'erreur, pas de la faire remonter.

    Tu peux émettre un signal perso à partir de la méthode extension avec les 2 codes d'erreur (ErrorPageExtensionOption::domain et ::error).

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    C'est un peu le but que j'avais compris pour le ErrorPageExtensionReturn (mais au final, ce n'est pas ce dont j'ai besoin)

    Je récupère une partie des informations dont j'ai besoin grâce à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    WebView::WebView() : QWebView(parent)
    {
      ...
      connect(page()->networkAccessManager(), SIGNAL(finished(QNetworkReply* )), this, SLOT(getReply(QNetworkReply*)));
    }
     
    void WebView::getReply(QNetworkReply* reply)
    {
      QNetworkReply::NetworkError err = reply->error();
      if(err != 0)
      {
        qDebug("NetworkError => %d \n", err);
      }
    }
    Je te remercie beaucoup de ton aide, je passe le sujet à je le réouvrirai plus tard en cas de problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/02/2006, 16h29
  2. [Excel] Message "Interface non supportée"
    Par Hathor dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 20/09/2005, 17h09
  3. Interface non supportée
    Par Amara dans le forum Langage
    Réponses: 14
    Dernier message: 16/07/2004, 13h18
  4. [Accents - XML] Problème de codage non supporté !!
    Par Smortex dans le forum Composants VCL
    Réponses: 6
    Dernier message: 24/11/2002, 11h00
  5. [CR8][Delphi6] erreur imprimante non supportée
    Par Sebastien L. dans le forum SDK
    Réponses: 3
    Dernier message: 12/09/2002, 15h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo