Chrome WebRTC屏幕共享扩展程序需要刷新

cha*_*123 3 google-chrome google-chrome-extension webrtc getusermedia

Chrome已经引入了WebRTC屏幕共享扩展的使用.在此,每个域都必须具有扩展名,以便人们安装扩展以便使用webrtc共享屏幕.

这是我的用例:

  1. 在正在进行的webrtc视频通话期间,如果一个人需要进行屏幕共享而没有扩展,则在安装扩展后需要刷新页面.这会中断呼叫,两个人都需要再次加入呼叫.

  2. 我想使用javascript控制用户体验,因此不需要刷新.但是如果我们不刷新,html页面就无法识别最近安装的扩展.

我已经看过许多关于此的开源代码,但它们都没有类似于我的用例.他们假设在会话期间安装扩展.

但是,我见过www.uberconference.com并且他们有类似的用例.我尝试在实时通话期间安装屏幕共享扩展,它不需要页面刷新,也没有中断通话.它在安装扩展后立即进行了屏幕共享.

我无法理解他们是如何做到的,因为优步不是开源的.许多人说安装扩展后必须刷新.在这种情况下的任何帮助将受到高度赞赏.

以下是使用内联安装安装chrome扩展的方法:

$scope.installExtension= function(){

  !!navigator.webkitGetUserMedia
  && !!window.chrome
  && !!chrome.webstore
  && !!chrome.webstore.install &&
  chrome.webstore.install('https://chrome.google.com/webstore/detail/<some-id>',
    successInstallCallback,
    failureInstallCallback
  );

};

function successInstallCallback() {
  //location.reload();
}
function failureInstallCallback(error) {
  alert(error);
}
Run Code Online (Sandbox Code Playgroud)

xdu*_*ine 5

这是我们最近改变的getScreenMedia.查看拉取请求以了解我们是如何做到的:

我写了关于我博客上的更改,所以请查看更多详细信息,但重要的是:

chrome.runtime.connect我们可以使用外部消息传递,而不是直接创建通信通道和直接消息传递.我们可以chrome.runtime.sendMessage(extensionId, options, callback)在后台脚本中使用和,而不是向内容脚本拾取并传递给后台脚本(反之亦然)的窗口发送消息chrome.runtime.onMessageExternal.这适用于其他解决方案没有的情况,因为后台脚本在扩展安装时立即加载,而内容脚本在页面加载时注入.

所以,基本上,扩展使用不同的权限:

"externally_connectable": {
  "matches": [
      "https://example.com/*"
  ]
}
Run Code Online (Sandbox Code Playgroud)

还有一个不同的API:

  • chrome.runtime.sendMessage 结合 chrome.runtime.onMessageExternal

代替

  • window.postMessage结合window.addEventListener('message')chrome.runtime.connect.

至少有两个不同的站点https://apps.mypurecloud.comhttps://beta.talky.io与内联扩展安装进行屏幕共享,完全没有重新加载.