[英]Chrome extension: how to pass ArrayBuffer or Blob from content script to the background without losing its type?
[英]Chrome Extension - Blob from Background to Context script
我有一个chrome扩展程序,试图记录活动选项卡并将blob保存到本地存储。
根据用户发出的命令调用chrome.tabCapture
,5秒后,记录停止并从记录的块中生成新的blob,继续下载文件。
下载文件时,文件为0字节,当之前放置断点时,检查blob大于0字节。 最终尝试将blob返回到sendResponse
回调中的上下文脚本。
好奇,如果在下载或重新上传到上下文脚本时,blob为空的原因是什么。
请访问以下文档: https : //developers.google.com/web/updates/2016/01/mediarecorder
background.js
chrome.tabCapture.capture(captureOptions, function (stream) {
if (!stream)
return;
var recordedChunks = [];
var options = {
mimeType: 'video/webm; codecs=vp9',
};
var mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.ondataavailable = function (event) {
if (event.data.size > 0) {
recordedChunks.push(event.data);
}
}
mediaRecorder.start();
setTimeout(function(){
stopRecording(stream, mediaRecorder, recordedChunks);
}, 5000);
})
var stopRecording = function (stream, mediaRecorder, recordedChunks) {
mediaRecorder.stop();
var blob = new Blob(recordedChunks, {
type: 'video/webm'
});
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
a.href = url;
a.download = 'test.webm';
a.click();
URL.revokeObjectURL(url);
stream.getVideoTracks()[0].stop();
};
我通过在ondataavailable
回调中下载文件来实现ondataavailable
:
background.js:
chrome.tabCapture.capture(captureOptions, function (stream) {
if (!stream)
return;
var recordedChunks = [];
var options = {
mimeType: 'video/webm; codecs=vp9',
};
var mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.ondataavailable = function (event) {
if (event.data.size > 0) {
var url = URL.createObjectURL(event.data);
var a = document.createElement('a');
document.body.appendChild(a);
a.style = 'display: none';
a.href = url;
a.download = 'test.webm';
a.click();
URL.revokeObjectURL(url);
}
}
mediaRecorder.start();
setTimeout(function(){
stopRecording(stream, mediaRecorder, recordedChunks);
}, 5000);
})
var stopRecording = function (stream, mediaRecorder, recordedChunks) {
mediaRecorder.stop();
stream.getVideoTracks()[0].stop();
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.