Skip to content
On this page

下载

阻止下载

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
mbWebView mbView = mbCreateWebWindow(MB_WINDOW_TYPE_POPUP, nullptr, 0, 0, 800, 600);
// ...
mbOnDownloadInBlinkThread(mbView, onDownloadCallback, nullptr);
mbDownloadByPathmbPopupDialogAndDownload 类似,不再举例。

自行实现下载

mbOnDownload 中返回了 URL 信息,可以自行使用 curl 等库执行下载。

TIP

mbOnDownload 回调中暂时只返回了下载URL,未带有身份认证信息,所以只适用于不需要身份认证的下载请求。

如果想获得请求的其它信息,可以参考之前网络操作中的相关内容获取,然后进行下载。