我正在尝试实现混合内容拦截器 (即,使用QtWebKit阻止所有http://填充在https://页面内)。
这是我到目前为止使用子类化QNetworkAccessManager的原始实现 并重新实现createRequest()
QNetworkReply * MyNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData)
{
QNetworkRequest r = req; /* Take a non-const copy */
if(this->mainWindow->ui->blockMixedContent_checkBox->isChecked()) { // <-- is Mixed content blocking enabled ?
QUrl url(this->URL); // <--- this->URL is the top level URL that is shown on URL bar
if(url.scheme() == "https") { // <--- Okay, top level URL scheme is https://
if(r.url().scheme() == "http") { // <-- This particular request URL scheme was http:// block it
qDebug() << "HALF-ENCRYPTED URL: " << r.url();
r.setUrl(QUrl()); // Set url to empty to "block" it
}
}
}
return QNetworkAccessManager::createRequest( op, r, outgoingData );
}
现在,当我访问测试混合内容阻止的页面时 https://ie.microsoft.com/testdrive/browser/mixedcontent/assets/woodgrove.htm 一切都很好,它会阻止活动(脚本)和被动(图像)混合http:// content。
但是,当我尝试点击来自https://startpage.com的http://链接时,或者当https://页面将我重定向到http://页面时,或者当我从https://返回历史记录时页面到http://页面它会阻止我!
那么当用户点击https://页面上的http://链接时,如何从https://重定向到http:// site或从历史记录返回历史记录,我怎么能告诉他们不要使用混合内容阻止https://到http:// page ???
例如,有没有办法从https:// - &gt;中捕捉重定向? http://在调用creatRequest()之前?
或者这些所有检查都可以在createRequest()中以某种方式完成???