Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao tentar direcionar uma página para um download com window.location, ocorre o seguinte erro:
Frame load interrupted by policy change
Código de teste:
function Download(){
window.location = "app.exe";
}
<a href="javascript:void(Download())">Start Download</a>
Esse erro só ocorre nos navegadores criados com QT+Webkit (QWebView), nos demais navegadores (firefox, Chrome, IE) o download ocorre normalmente.
Console do QWebInspector:
/applications/core/interface/imageproxy/imageproxy.php?img=http://imageshack.us/a/img46/89/dwasi.png&key=dfac6092b94ecca70e7de7f1cbac3aad7982b2869ff97d4e80309fc920b03fb9" alt="dwasi.png" />
Será que eu tenho que configurar algo no compilador ou configurar no QWebSettings???
Olá William, tudo bem contigo?
Na verdade isso é apenas um exemplo. Existem sistemas (softwares online como Webmails) que para evitar o Foward usam Iframes com window.location para executar a ação de download e ao invés de fazer o download ocorre esse erro (não é o problema com o javascript em si, já que existem vários sistemas que usam Iframes e location para direcionar a página para downloads).
O problema aqui realmente é o "Policy", que causa está "falha" (bloqueio).
Gostaria de saber se eu tenho que configurar algo no compilador ou configurar no QWebSettings?
[editado]
Quem moveu o meu tópico para Javascript? Essa pergunta é sobre Qt+Wekit (ou seja c++).
Que vacilo da moderação.
Fui eu quem moveu, porque parece que vc está pedindo ajuda p/ a parte javascript + HTML do negócio.
Fácil falar que é vacilo sem entender o motivo.
Me perdoe _Isis_, mas foi vacilo sim. Eu já conheço a "casa" a muito tempo e conheço as regras, não iria cometer tal gafe de postar em local totalmente errado.
No final do meu poste tem a seguinte pergunta:
Será que eu tenho que configurar algo no compilador ou configurar no QWebSettings???
Ou seja compilador fica já claro que é sobre c/c++/etc.
QWebSettings é uma "função" da biblioteca C++ estendida pelo QT, que deixa também claro que é sobre C++.
Me perdoe o jeito de falar. Vacilo quando me refiro, é ler por cima algo e deduzir sem ter certeza. Portanto não me leve a mal.
Grato.
Eu descobri, nos navegadores Webkit convencionais (como Safari), ao fazer um download o console mostra que a requisição é cancelada, portanto antes de criar um "Download manager" no QT, devemos cancelar ela primeiro, e só então criar uma nova requisição no "Download Manager".
Solução:
//replace [QWebView] by your WebView
connect([QWebView]->page(), SIGNAL(unsupportedContent(QNetworkReply*)),
this, SLOT(downloadContent(QNetworkReply*)));
...
void [main class]::downloadContent(QNetworkReply *reply){
//Replace "[main class]" pela sua "Classe" principal.
[QWebView]->stop();
//solution: stop loading --troqye [QWebView] pelo seu WebView
/*função para download*/
}
fonte:
http://stackoverflow.com/questions/16278747/error-downloading/16782607#16782607
pq vc não faz simplesmente:
<a href="app.exe">Start Download</a>??