【发布时间】:2022-12-05 04:07:26
【问题描述】:
我正在尝试构建一些扩展,其中包含一个表单和一个使用 desktopCapture 捕获屏幕的选项,如下所示:
该表单是用 React TypeScript 编写的,用于捕获屏幕的代码(来自here)如下:
chrome.runtime.onMessage.addListener(
(message, sender, senderResponse) => {
if (message.name === "stream" && message.streamId) {
let track, canvas;
navigator.mediaDevices
.getUserMedia({
video: {
mandatory: {
chromeMediaSource: "desktop",
chromeMediaSourceId: message.streamId,
},
},
})
.then((stream) => {
track = stream.getVideoTracks()[0];
const imageCapture = new ImageCapture(track);
return imageCapture.grabFrame();
})
.then((bitmap) => {
track.stop();
canvas = document.createElement("canvas");
canvas.width = bitmap.width;
canvas.height = bitmap.height;
let context = canvas.getContext("2d");
context.drawImage(bitmap, 0, 0, bitmap.width, bitmap.height);
return canvas
.toDataURL()
.then((url) => {
//TODO download the image from the URL
chrome.runtime.sendMessage(
{ name: "download", url },
(response) => {
if (response.success) {
alert("Screenshot saved");
} else {
alert("Could not save screenshot");
}
canvas.remove();
senderResponse({ success: true });
}
);
})
.catch((err) => {
alert("Could not take screenshot");
senderResponse({ success: false, message: err });
});
});
}
return true;
}
);
我的意图是,当用户单击“截屏”时,上面的代码将运行,然后在保存时,图像将显示在该框中。
我能够“抓住”这两个元素,包括我希望在截屏后显示图像的框,以及“截屏”按钮。
据我所知,content_script 仅注入网页(浏览器),并且无法访问扩展,因此,这不是在其中添加代码的方式..
我错过了什么?我如何添加一个 eventListener,如果单击按钮,screenCapturing 代码将运行,我将能够将框设置为捕获的图像?
此致!
【问题讨论】:
标签: javascript reactjs google-chrome-extension