我正在使用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是否有任何限制?还是我做错了什么?
谢谢。
答案 0 :(得分:0)
正如注释中提到的@wOxxOm一样,似乎正在传递的数据已被字符串化,因此文件将无法通过。
但是,我在这里找到了一个很好的解决方案: