Google chrome extension 一种使onDeterminingFileName和NativeMessaging协同工作的方法

Google chrome extension 一种使onDeterminingFileName和NativeMessaging协同工作的方法,google-chrome-extension,Google Chrome Extension,我试图在下载文件之前确定文件是否已经在我的系统中。 我通过从服务器获取文件名 chrome.downloads.onDeterminingFilename.addListener(function (item, suggest) { var message = { "fileName": item.filename, "directory": directory }; suggest({ filename: item.filename, con

我试图在下载文件之前确定文件是否已经在我的系统中。 我通过从服务器获取文件名

chrome.downloads.onDeterminingFilename.addListener(function (item, suggest) {

    var message = { "fileName": item.filename, "directory": directory };

    suggest({
        filename: item.filename,
        conflict_action: 'prompt',
        conflictAction: 'prompt'
    });

    // conflict_action was renamed to conflictAction in
    // https://chromium.googlesource.com/chromium/src/+/f1d784d6938b8fe8e0d257e41b26341992c2552c
    // which was first picked up in branch 1580.
});
这很有效

我正在通过本机消息传递检查文件名

chrome.runtime.sendNativeMessage("testcsharp", message, function (response) {
        if (chrome.runtime.lastError) {
            alert("ERROR: " + chrome.runtime.lastError.message);
        } else {
            isDownloaded = JSON.parse(JSON.stringify(response)).data;

        }
    });

问题是它们都是异步的,但如果我的文件已经存在,我需要避免“另存为”对话框,我发现唯一的方法是调用chrome.downloads.cancel(item.id),但不能保证本地消息会及时响应OnDetermingFileName中的“取消”。是否有办法做到这一点,或者我只是在通知此文件已存在并手动关闭“保存”对话框时卡住了?

您可以尝试:始终取消。然后,如果您确实想下载,请在信息可用时重新启动下载。有点笨拙,但如果我取消从异步nativemessaging回调中获取值,然后重新下载,并跟踪是否尝试下载,则确实有效。