javascript - 由于不推荐使用 createObjectURL,如何将画布流传递到另一个窗口?
问题描述
我正在构建一个非常具体的项目,它具有以下内容:
带有画布元素的主窗口。
从主窗口 (window.open(...)) 打开的第二个窗口获取网络摄像头流并将其绘制在画布上。
我需要在主窗口的画布上实时绘制相同的画布。我现在正在做的是在我的第二个窗口上,我这样做 window.URL.createObjectURL(canvasStream)
给了我一个 blob url,我可以在主窗口中使用它来获取提要并将其绘制回主画布上。
这一切工作(阅读工作)非常好,但现在该URL.createObjectURL
功能已被弃用,不能再使用。这意味着我无法再将 blob url 传递到我的主窗口......
如果不使用此功能,我如何将该画布流传递到我的主窗口?我知道我也许可以使用 Websocket 将帧从一个画布发送到另一个画布,但我发现它不那么可靠且不太一致。它还增加了另一层可能失败的复杂性。
注意:该项目将在一个nw.js
包中运行,因此启用标志和类似的东西没有问题。
注意 2:我知道我可以继续使用尚未弃用的旧版本,nw.js
但这URL.createObjectURL
对未来来说不是一个好的解决方案。
非常感谢你的帮助。
解决方案
根据收到的评论,我设法完成了这项工作。
我没有意识到您可以直接在父窗口中从打开的窗口访问变量。
在父窗口中从打开的窗口访问变量的真正基本代码示例。
// In the parent
var myWindow = window.open(url);
// In the child window
var myVar = "test";
// In the parent
console.log(myWindow.myVar); // => "test"
这意味着您只需要在子窗口中创建画布/视频流,然后可以通过执行以下操作将其应用于主窗口中的元素:
// In the child window
var canvasEl = document.querySelector("canvas");
var canvasStream = canvasEl.captureStream(30);
// In the parent
var videoEl = document.querySelector("video");
videoEl.srcObject = myWindow.canvasStream;
然后,主窗口中的画布将显示与子窗口中的画布相同的内容。
推荐阅读
- mongodb - 使用 Capped Collections 读取定义很少索引的查询是个好主意吗
- python-3.x - 在 Python 中使用 GNURadio
- yubico - 两个 PIV 证书 - 一个 YubiKey 5
- javascript - 无需调用即可触发 JavaScript 事件侦听器
- javascript - website-scraper 获取具有 srcset 值以及 src 的图像
- mleap - Mleap 计算置信度和特征分数
- java - 使用 Spark 读取巨大的 CSV 文件
- javascript - 在标记传单地图的弹出窗口中插入多个倒计时
- kotlin - Kotlin 自定义 getter 和可变列表
- android - 避免活动!!扩展 DialogFragment 时