Chrome扩展程序:在捕获桌面时,选定的窗口会聚焦在前面

时间:2015-07-10 13:05:46

标签: javascript html5 canvas google-chrome-extension google-chrome-app

所以,我有一个chrome扩展程序,可以使用chrome.desktopCapturenavigator.webkitGetUserMediacanvas来捕获所选桌面窗口的图像。当我要求用户选择要共享的窗口时,所选窗口会聚焦到前面。

这是我的代码 -

manifest.json -

{
  "name": "Desktop Capture Example",
  "description": "Show desktop media picker UI",
  "version": "1",
  "manifest_version": 2,
  "background": {
     "persistent": false,
      "scripts": ["background.js"]
  },
    "browser_action": {
    "default_title": "Take a screen shot of Desktop!"
  },
  "permissions": [
    "desktopCapture"
  ]
}

background.js -

var pending_request_id = null;

chrome.browserAction.onClicked.addListener(function() {

   pending_request_id = chrome.desktopCapture.chooseDesktopMedia(["screen", "window"],onAccessApproved);

});

function gotStream(stream) {
  console.log("Received local stream");
  var video = document.createElement('video');
  video.addEventListener('loadedmetadata',function(){
      var canvas = document.createElement('canvas');
      canvas.width = this.videoWidth;
      canvas.height = this.videoHeight;
      var ctx = canvas.getContext("2d");
      ctx.drawImage(this, 0, 0);
      var url = canvas.toDataURL();
      console.log(url);
      // will open the captured image in a new tab
      //window.open(url);
    },false);
  video.src = URL.createObjectURL(stream);
  video.play();
  }

function getUserMediaError() {
  console.log("getUserMedia() failed.");
}

function onAccessApproved(id) {
  if (!id) {
    console.log("Access rejected.");
    return;
  }
  navigator.webkitGetUserMedia({
      audio:false,
      video: { mandatory: { chromeMediaSource: "desktop",
                            chromeMediaSourceId: id,
                            maxWidth: 4000,
                            maxHeight: 4000} }
  }, gotStream, getUserMediaError);
}

但是,如果我使用window.open(url),则焦点设置为此打开的窗口而不是共享窗口。但是如果我使用chrome.tabs.create({url: url,active : true},function(tab){})打开网址,而不是使用window.open,共享窗口会集中在打开的标签页面上。我希望打开的标签聚焦不共享窗口。我该怎么做?

2 个答案:

答案 0 :(得分:3)

您需要使用chrome.tabs api通过更新方法切换活动标签:https://developer.chrome.com/extensions/tabs#method-update

在Chrome 33之前,你会这样做:

chrome.tabs.update(tabId, {selected: true});

我相信这改变了:

chrome.tabs.update(tabId, {active: true});

根据选项卡的对齐方式,您可能还需要chrome.windows api:chrome.windows.update,请查看焦点参数(在chrome.tabs api文档中也有提及)。

编辑:设置错误的属性,更正。

答案 1 :(得分:1)

除了Brian的回答之外,您还希望在您创建了一个在该窗口中处于活动状态的标签后,也可以使窗口聚焦。

这是类似的:

chrome.tabs.create({url: url, active: true}, function(tab) {
  chrome.windows.update(tab.windowId, {focused: true});
});