Chrome расширение - MediaStream на content_scripts - PullRequest
0 голосов
/ 16 июня 2020

Как передать объект MediaStream (popup. js) в content_scripts?

popup. js это мой javascript, включенный в мой html файл из "browser_action" в манифесте. json

manifest. json

"background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "browser_action": {
        "default_icon": "icon.png",
        "default_popup": "popup.html",
    },
    "content_scripts": [
        {
            "matches": ["<all_urls>"],
            "css": ["content-style.css"],
            "js": ["content.js", "fontawesome.js"]
        }
    ],
    "permissions": ["tabs", "desktopCapture", "tabCapture"]

Я хочу сделать расширение chrome, которое записывает текущую вкладку пользователя. Я могу захватить вкладку во всплывающем окне. js сторона. Я пробовал использовать sendMessage, но думаю, что он может принимать только простые объекты.

popup. js

chrome.tabCapture.capture({audio: true, video: true}, function(tab){

  console.log(tab); // MediaStream that I needed

  chrome.tabs.query({ currentWindow: true, active: true }, function (tabs) {
    let msg = {
      actionMessage: 'popup-open'
    };

    chrome.tabs.sendMessage(tabs[0].id, msg);
  });
});

content_scripts. js

chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
  if (message.actionMessage === 'popup-open') {
    // do something and start recording  
  }
});

сегодня я использую приведенный ниже код в своих content_scripts. js, но единственная вкладка, которую мне нужно записать, это вкладка, которая вызывает расширение.

let tabStream = await navigator.mediaDevices.getDisplayMedia({ video: true, audio: true });

Мне нужно, чтобы это было MediaStream, который я получил из своего всплывающего окна. js, поэтому мне не нужно просить пользователя всегда делиться текущей вкладкой экрана.

Я видел, что у каждого MediaStream есть идентификатор (ha sh) , не знаю, можно ли использовать это для захвата медиапотока в моих content_scripts.

Можно ли это сделать, или мне нужно сгенерировать всю запись во всплывающем или фоновом скрипте?

...