Appearance
下载
阻止下载
cpp
static BOOL MB_CALL_TYPE onDownload(mbWebView webView, void* param, mbWebFrameHandle frameId, const char* url, void* downloadJob)
{
return false;
}
cpp
mbWebView mbView = mbCreateWebWindow(MB_WINDOW_TYPE_POPUP, nullptr, 0, 0, 800, 600);
// ...
mbOnDownload(mbView, onDownload, nullptr);
使用 mbOnDownload
的回调返回 false 可阻止下载
利用官方 API 实现下载
仅仅使用 mbOnDownload
返回 true 只是允许下载,要实现保存下载文件需要使用mbOnDownloadInBlinkThread,里面使用 mbPopupDialogAndDownload实现了一个弹出文件另存框,并开始下载。
cpp
void MB_CALL_TYPE onNetJobDataRecvCallback(void* ptr, mbNetJob job, const char* data, int length)
{
// ...
}
void MB_CALL_TYPE onNetJobDataFinishCallback(void* ptr, mbNetJob job, mbLoadingResult result)
{
// ...
}
static mbDownloadOpt MB_CALL_TYPE onDownloadCallback(mbWebView webView,
void* param,
size_t expectedContentLength,
const char* url,
const char* mime,
const char* disposition,
mbNetJob job,
mbNetJobDataBind* dataBind)
{
mbDownloadBind bind = { 0 };
bind.param = nullptr;
bind.recvCallback = onNetJobDataRecvCallback;
bind.finishCallback = onNetJobDataFinishCallback;
bind.saveNameCallback = nullptr;
return mbPopupDialogAndDownload(webView, (mbDialogOptions*)param, expectedContentLength, url, mime, disposition, job, dataBind, &bind);
}
cpp
mbDownloadByPath与 mbWebView mbView = mbCreateWebWindow(MB_WINDOW_TYPE_POPUP, nullptr, 0, 0, 800, 600);
// ...
mbOnDownloadInBlinkThread(mbView, onDownloadCallback, nullptr);
mbPopupDialogAndDownload
类似,不再举例。自行实现下载
mbOnDownload
中返回了 URL 信息,可以自行使用 curl 等库执行下载。
TIP
mbOnDownload
回调中暂时只返回了下载URL,未带有身份认证信息,所以只适用于不需要身份认证的下载请求。
如果想获得请求的其它信息,可以参考之前网络操作中的相关内容获取,然后进行下载。