所以我試圖從一個標籤捕獲網絡音頻並將其傳遞到另一個腳本,該腳本與頁面上的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壞