我试图在Chrome打包应用中从网络视图中进行屏幕共享工作。
我目前有一个网页,当需要桌面共享时调用window.postMessage,我需要chrome.desktopCapture.chooseDesktopMedia来发回chromeMediaSourceId以允许调用navigator.webkitGetUserMedia。
我的Chrome应用主html页面只有一个<webview>
标记,指向外部网站。
我已经能够从webview中获取消息并将其发送到background.js并调用
chrome.runtime.onMessage.addListener(function (message, sender, callback) {
chrome.desktopCapture.chooseDesktopMedia(['screen'],sender.tab, function (streamid) {
message.type = 'gotScreen';
message.streamId = streamid;
callback(message);
});
});
我得到屏幕选择器弹出窗口,在选择屏幕后,streamId通过回调发送,回调将消息发布到webview,然后使用流id调用navigator.webkitGetUserMedia。此调用失败,我收到InvalidStateError
。
如果我在没有webview的情况下运行应用程序,屏幕共享就能完美运行。似乎因为sender.tab
没有设置webview没有权限使用生成的streamId。
如果从webview中调用navigator.webkitGetUserMedia并从background.js调用chrome.desktopCapture,有没有办法让屏幕共享工作?