javascript - Chrome 扩展 - Blob 从背景到上下文脚本

标签 javascript google-chrome google-chrome-extension

我有一个 chrome 扩展尝试记录事件选项卡并将 blob 保存到本地存储。

根据用户发出的命令调用chrome.tabCapture,5秒后,记录停止并从记录的 block 中创建一个新的blob,继续下载文件。

下载文件时,文件大小为 0 字节,在之前放置断点,检查 blob 时,文件大小大于 0 字节。最终尝试在 sendResponse 回调中将 blob 返回到上下文脚本。

很好奇在下载或重新运行上下文脚本时是否有任何问题表明 blob 为空。

遵循文档:https://developers.google.com/web/updates/2016/01/mediarecorder

背景.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 回调中下载文件来使其工作:

背景.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();
 };

关于javascript - Chrome 扩展 - Blob 从背景到上下文脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43646228/

相关文章:

google-chrome - 谷歌浏览器扩展 : How to detect Copy action (Ctrl-C and Edit-Copy)?

javascript - 从 popup.js 中清除 Chrome 扩展 localStorage

javascript - 在 Chrome 中使用 HTML5 和 getUserMedia 录制音频

javascript - onMouseMove 不会触发 Chrome 中的 <option> 元素

javascript - 编辑 HighChart 后如何计算其点的总和

javascript - 如何将焦点集中在页面顶部的文本上

javascript - Web Audio Api 问题(DOM 异常 12)

javascript - VM305 :5551 crbug/1173575, 非JS模块文件弃用

javascript - 显示历史 map

javascript - 用常规数字替换所有出现的科学数字