将“文件”从弹出窗口传递到内容脚本

时间:2019-07-03 16:33:36

标签: google-chrome google-chrome-extension google-chrome-app

我正在使用message passing API,并且已成功在弹出窗口和内容脚本之间传递变量,但是传递文件不起作用,它会向内容脚本返回空值,而不是文件数据。

我已经尝试过的是:

弹出窗口:

<input type="file" id="file">
$(document).on('change', '#file', function() {
    var value = this.value;
    var fileName = typeof value == 'string' ? value.match(/[^\/\\]+$/)[0] : value[0];
    var fileData = this.files[0];
    // this prints the file data successfully to console
    console.log(fileData); 
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        chrome.tabs.sendMessage(tabs[0].id, {action: "sendFile", file: fileData });
    });
});

内容脚本:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.hasOwnProperty("action") && request.action == 'sendFile') {
        console.log(file); // <-- empty
    }
});

消息API是否有任何限制?还是我做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

正如注释中提到的@wOxxOm一样,似乎正在传递的数据已被字符串化,因此文件将无法通过。

但是,我在这里找到了一个很好的解决方案:

https://stackoverflow.com/a/36930012/2654691