Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome extension 请求iframe内的屏幕共享_Google Chrome Extension_Google Chrome App - Fatal编程技术网

Google chrome extension 请求iframe内的屏幕共享

Google chrome extension 请求iframe内的屏幕共享,google-chrome-extension,google-chrome-app,Google Chrome Extension,Google Chrome App,我已经构建了一个Chrome扩展,它成功地实现了与WebRTC的屏幕共享,但是对于使用该扩展在iframe中运行的站点有一个要求 function getUserScreen(sources, extensionId) { const request = { type: 'getUserScreen', sources: sources }; return new Promise((resolve, reject) =>

我已经构建了一个Chrome扩展,它成功地实现了与WebRTC的屏幕共享,但是对于使用该扩展在iframe中运行的站点有一个要求

function getUserScreen(sources, extensionId) {
    const request = {
            type: 'getUserScreen',
            sources: sources
    };
    return new Promise((resolve, reject) => {
        chrome.runtime.sendMessage(extensionId, request, response => {
            switch (response && response.type) {
                case 'success':
                    log('success!');
                    resolve(response.streamId);
                    break;
                case 'error':
                    log('error!');
                    reject(new Error(error.message));
                    break;
                default:
                    log('unknown!');
                    reject(new Error('Unknown response'));
                    break;
            }
        });
    }).then(streamId => {
        return navigator.mediaDevices.getUserMedia({
            video: {
                mandatory: {
                    chromeMediaSource: 'desktop',
                    chromeMediaSourceId: streamId,
                    maxWidth: window.screen.width,
                    maxHeight: window.screen.height                         
                }
            }
        });
    });
}
有可能做到这一点吗?下面是我的一个代码示例——“未知”情况在iframe中始终执行

function getUserScreen(sources, extensionId) {
    const request = {
            type: 'getUserScreen',
            sources: sources
    };
    return new Promise((resolve, reject) => {
        chrome.runtime.sendMessage(extensionId, request, response => {
            switch (response && response.type) {
                case 'success':
                    log('success!');
                    resolve(response.streamId);
                    break;
                case 'error':
                    log('error!');
                    reject(new Error(error.message));
                    break;
                default:
                    log('unknown!');
                    reject(new Error('Unknown response'));
                    break;
            }
        });
    }).then(streamId => {
        return navigator.mediaDevices.getUserMedia({
            video: {
                mandatory: {
                    chromeMediaSource: 'desktop',
                    chromeMediaSourceId: streamId,
                    maxWidth: window.screen.width,
                    maxHeight: window.screen.height                         
                }
            }
        });
    });
}

一种方法是使用
消息
事件。通过“message”事件,IFrame可以用来与网页进行通信,因此它还可以与扩展可能在该网页上执行的任何内容脚本进行通信;谷歌推荐这种方法,如下所示:

从iframe来看,它看起来像这样:

var msg = { type: "CUSTOM_FROM_IFRAME", data: "Say hi." };
parent.postMessage(msg, "*");

window.addEventListener("message", ev=>{
  if(ev.type == "CUSTOM_FROM_CONTENTSCRIPT") console.log("can proceed");
});
内容脚本:

window.addEventListener("message", ev=>
{
  if(ev.type == "CUSTOM_FROM_IFRAME")
     chrome.runtime.sendMessage({type: ev.type, data: ev.data}, response => { 
     myIFrame_element.contentWindow.postMessage({type: "CUSTOM_FROM_CONTENTSCRIPT", data: response.data}, "*"); }); 
});
从后台页面执行内容脚本代码:

chrome.tabs.executeScript(mypgage_tab_id, {src: contentscript.js});

你解决了这个问题吗?