[Resolvido] Requisições no QWebView



  • No Google Chrome (Firefox e IE funcionam igual ao Chrome) quando ocorre um erro em uma requisição, ele tenta uma nova requisição, veja o LOG do wireshark:

    !http://i.stack.imgur.com/qy0jL.png(wireshark log)!

    No WebInspector aparece apenas uma requisição, em outras palavras: parece um sistema de prevenção contra perda de conexão na requisição (provavelmente deve ter um numero de tentativas ou por tempo).

    Estou desenvolvendo um navegador completo em QT e ao realizar testes de falhas, como o exemplo do Chrome acima, eu percebi que o "QWebView" não trabalha igual ao Google Chrome.

    Eu gostaria de fazer o meu navegador funcionar igual aos navegadores convencionais, como faço para reimplementar QNetWorkRequest/QNetWorkAccessManager para que funcione tal como Chrome, Firefox, InternetExplorer?

    Por favor me ajude.

    @myWebPage *myWP = new myWebPage();
    myWP->setForwardUnsupportedContent(true);
    myWP->setNetworkAccessManager(m_network);
    ui->myWebView->setPage(myWP);

    if(q!=true) {
    settings = QWebSettings::globalSettings();

    settings->setAttribute( QWebSettings::OfflineWebApplicationCacheEnabled,true );
    settings->setAttribute( QWebSettings::LocalContentCanAccessRemoteUrls,true );
    settings->setAttribute( QWebSettings::OfflineStorageDatabaseEnabled,true );
    settings->setAttribute( QWebSettings::LocalContentCanAccessFileUrls,true );
    settings->setAttribute( QWebSettings::LocalStorageEnabled,true );
    settings->setAttribute( QWebSettings::JavascriptCanOpenWindows,true );
    settings->setAttribute( QWebSettings::JavascriptCanCloseWindows,true );
    settings->setAttribute( QWebSettings::JavascriptEnabled,true );
    
    settings->setAttribute( QWebSettings::PluginsEnabled,true );
    settings->setAttribute( QWebSettings::JavaEnabled,false );//Desabilita java
    settings->setAttribute( QWebSettings::DeveloperExtrasEnabled,true );
    settings->setAttribute( QWebSettings::AutoLoadImages, true );
    
    
    settings->setAttribute( QWebSettings::DnsPrefetchEnabled, true );
    settings->setAttribute( QWebSettings::LocalStorageDatabaseEnabled, true );
    settings->setAttribute( QWebSettings::AcceleratedCompositingEnabled, true );
    settings->setAttribute( QWebSettings::JavascriptCanAccessClipboard, false );
    settings->setAttribute( QWebSettings::ScrollAnimatorEnabled, true );
    
    settings->setAttribute( QWebSettings::PrintElementBackgrounds, false );
    
    settings->setOfflineWebApplicationCachePath( QString(localStorage+"/appcache") );
    settings->enablePersistentStorage( QString(localStorage+"/persistent") );
    settings->setOfflineStoragePath( QString(localStorage+"/offlinestorage") );
    settings->setLocalStoragePath( QString(localStorage+"/storage") );
    settings->setIconDatabasePath( QString(localStorage+"/icons") );
    
    settings->setMaximumPagesInCache( 99999 );
    settings->setObjectCacheCapacities( 0,99999,99999 );
    
    settings->setOfflineWebApplicationCacheQuota( 5*1024*1024 );
    settings->setOfflineStorageDefaultQuota( 5*1024*1024 );
    

    }
    connect(ui->myWebView->page(), SIGNAL(downloadRequested(QNetworkRequest)), this, SLOT(Download(QNetworkRequest)));
    connect(ui->myWebView->page(), SIGNAL(unsupportedContent(QNetworkReply*)), this, SLOT(unsupportedToDownload(QNetworkReply*)));
    connect(ui->myWebView->page(), SIGNAL(printRequested(QWebFrame*)), this, SLOT(printFrame(QWebFrame*)));@



  • Nao sei se vai ajudar... eu tava olhando a documentaçao e vi que o QWebView tem um metodo chamado page() que retorna qwebpage(), e na classe QWebpage tem outro metodo que retorna um NetworkAccessManager que gerencia a conexao da pagina....

    voce pode criar uma classe, que herda de um qwebview, nela vc vai reimplementar o que quizer...

    acredito que vc ja deva ter feito muito codigo, entao voce pode promover a classe QWebView do seu codigo pela classe nova...

    La no modo design clicando com o botao direito no qwebview tem um opçao chamada "promote to...", tente usar ela para promover...

    Na classe que foi herda de de um QWebView voce verifica se o qwebview emitiu um signal de loadStarted() e pega a page que esta sendo carregada e cria uma thread para ficar fazendo o que vc quer...



  • Sevc souber, voce sabe como que faz para o qwebview carregar uma pagina que usa o flash player?



  • Solução http://stackoverflow.com/a/17915208/1518921

    bq. Off-topic: Rodrigocg no Windows acredito que basta
    @QWebSettings::globalSettings()->setAttribute( QWebSettings::PluginsEnabled, true);@
    e ter o plugin do flash instalado (plugin do Mozilla e Safari).


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.