所以我试图从一个标签捕获网络音频并将其传递到另一个脚本,该脚本与页面上的DOM元素一起工作。webkitMediaStream在Chrome扩展中使用sendMessage时丢失的对象类型
扩展脚本
在background.js
,我使用下面的脚本:
chrome.tabCapture.capture(constraints, function(stream) {
console.log("\ngot stream");
console.log(stream);
chrome.tabs.sendMessage(tabID, {
"message": "stream",
"stream": stream
});
});
的开发者工具包让我发现,所创建的对象确实是一个MediaStream对象。 (我想要的,似乎工作正常)。
延长CONSOLE:
MediaStream {onremovetrack: null, onaddtrack: null, onended: null, ended: false, id: "c0jm4lYJus3XCwQgesUGT9lpyPQiWlGKHb7q"…}
内容脚本
我使用内容脚本(注入),该页面本身然后拉JSON序列化对象回来了:
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.message === "stream") {
var thisStream = request.stream;
console.log(thisStream);
if (!thisStream) {
console.log("stream is null");
return;
}
loadStream(thisStream);
}
else if (request.message === "statusChanged") {
console.log("statusChanged");
}
});
PAGE CONSOLE
不幸的是,因为JSON序列化,对象类型丢失:
Object {onremovetrack: null, onaddtrack: null, onended: null, ended: false, id: "c0jm4lYJus3XCwQgesUGT9lpyPQiWlGKHb7q"…}
我需要重新塑造成一个MediaStream对象的对象,并尝试下面的东西都失败了:
尝试1:FAILED
var stream = new webkitMediaStream;
function loadStream(thisStream) {
stream = thisStream;
}
尝试2:失败
var stream;
function loadStream(thisStream) {
stream = new webkitMediaStream(thisStream);
}
尝试3:FAILED
var stream;
function loadStream(thisStream) {
stream = Object.create(webkitMediaStream, thisStream);
}
注: 为MediaStream
对象构造ISwebkitMediaStream
。
我需要一个更好的方法将对象从扩展脚本(chrome.tab.capture()
方法工作的唯一位置)传递到内容脚本(唯一可访问并可修改页面DOM元素的位置) ,
OR
我需要重铸JSON序列化对象返回到一个功能齐全的MediaStream
对象的一种方式。
在此先感谢!
JRad坏