我在Chrome扩展程序的内容脚本中定义了一个侦听器:
document.addEventListener("startRecording", function(data) {
chrome.runtime.sendMessage({'action' : 'captureCurrentTab'});
});
并在我的extension.js中定义了一个函数:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.action == "captureCurrentTab"){
captureCurrentTab();
}
});
function captureCurrentTab() {
chrome.tabs.getSelected(null, function(tab) {
chrome.tabCapture.capture(MediaStreamConstraint, handleCapture);
});
}
var MediaStreamConstraint = {
//audio: true,
video: true,
videoConstraints: {
mandatory: {
chromeMediaSource: 'tab',
minWidth: 1920,
maxWidth: 1920,
minHeight: 1080,
maxHeight: 1080
}
}
};
function handleCapture(stream) {
console.log('content captured');
console.log("Adding Stream: ", stream);
}
但是当我发送消息从我的网络应用程序开始录制时,这样:
var event = document.createEvent('Event');
event.initEvent('startRecording');
document.dispatchEvent(event);
然后扩展抛出异常:
1)响应tabCapture.capture时出错:MediaStream是必需的。 2)运行tabCapture.capture时未经检查的runtime.lastError:尚未为当前页面调用扩展(请参阅activeTab权限)。无法捕获Chrome页面。
以下是我提供的权限:
"permissions": [
"tabCapture",
"tabs",
"activeTab",
"http://*/*",
"https://*/*" ,
"http://localhost:1615/*"
]
但是当我点击我的扩展按钮并重复相同的过程(发送录音信息)时,一切正常。我不知道为什么每次都要点击扩展按钮开始捕获屏幕。 我该如何自动启动它?
我还为扩展程序定义了快捷键。当我在发送信息进行录制之前按下它们然后一切正常。但是当我从我的应用程序中触发/模拟它们时,再次以相同的异常结束。
请帮忙。
答案 0 :(得分:0)
问题在于,Chrome无法跟踪此事件是通过点击启动的。因此,不会调用"。
您应该在内容脚本代码/上下文中绑定click
事件侦听器,并直接从那里发送消息。我认为Chrome应该足以接受用户的调用。
或者,可以使用绕过内容脚本直接向扩展发送消息。这可以通过"externally_connectable"
method(docs)实现。