当前位置: 首页 > 知识库问答 >
问题:

Firefox Web Extensions API,用于多显示器和全屏

阎坚成
2023-03-14

火狐量子终于在2017年11月14日发布。引用此链接:

过去,您可以使用三种不同的系统之一开发Firefox扩展:XUL/XPCOM覆盖、引导扩展或附加SDK。到2017年11月底,WebExtensions API将成为开发Firefox扩展的唯一途径,其他系统将被弃用。

使用Firefox 57 Quantum和Web Extensions API,我想做一个能够在多个屏幕上运行的扩展。此扩展将用于显示多个屏幕和仪表板。

这个想法很简单。如果检测到两个或多个屏幕,每个Firefox启动后都会在全屏模式下为每个显示器打开一个新窗口。我可以做全屏,但面临的问题打开另一个显示器,并检测有多少显示器连接。

使用浏览器。windowsAPI创建另一个新选项卡,下面是一些代码片段:

getCurrentWindow().then((currentWindow) => {  
  let mirror1 = browser.windows.create({
    url: "http://172.20.12.211:8080/ivi",    
    state: "fullscreen"
  });

  mirror1.then(() => {
    browser.windows.remove(currentWindow.id);

    var updateInfo = {
      state: "fullscreen"
    };

    let mirror2 = browser.windows.create({
      url: "http://172.20.12.211:8080/ivi",    
      state: "fullscreen"
    }); 

    mirror2.then((nextWindow) => { 
      var updateInfo = {
        left: 1366
      };

      browser.windows.update(nextWindow.id, updateInfo);
    });

  });
});

显然,我上面的解决方案是硬编码的两个显示器和设置参数为1366像素,因此,如果屏幕分辨率不等于1366x768或如果有两个以上的显示器连接,此解决方案将无法正常工作。

因此,是否有任何API或更好的方法来检测连接了多少显示器并检查其分辨率?Web扩展API是否具有检测多个监视器和分辨率值的功能?如果没有,可能的变通办法是什么?

共有1个答案

黄俊雄
2023-03-14

没有现成的扩展API来回答您的问题,但是有足够的构建块来以其他方式回答这个问题。

当前窗口相对于显示屏的位置可通过以下方式获得:

  • window.screenX-https://developer.mozilla.org/en-US/docs/Web/API/Window/screenX
  • window.screenY-https://developer.mozilla.org/en-US/docs/Web/API/Window/screenY

可以通过以下方式检索显示窗口的显示器的大小:

  • 屏幕。宽度-https://developer.mozilla.org/en-US/docs/Web/API/Screen/width
  • 屏幕。高度-https://developer.mozilla.org/en-US/docs/Web/API/Screen/height
  • sreen。左-https://developer.mozilla.org/en-US/docs/Web/API/Screen/left
  • sreen。顶部-https://developer.mozilla.org/en-US/docs/Web/API/Screen/top

注意:当在Firefox中打开privacy.resistFingerprint首选项时,上述所有API都会返回虚拟值。您仍然可以通过chrome.windows.get扩展API查询窗口大小和位置。

如果您创建了一个虚拟窗口并在屏幕上移动它,那么您可以使用上述API来推断有关屏幕的信息,并最终构建可用显示和大小的完整视图。下面是打印上述信息的扩展示例。你可以点击按钮打开一个窗口,然后手动移动窗口
这可以通过打开一个非常窄的弹出窗口并用chrome移动来实现自动化。窗户。更新。如果左/上偏移太大,则窗口将粘在屏幕边缘(例如,如果在1024px宽的屏幕上,将99999作为左偏移传递给宽度为100的窗口,则左偏移变为924)。

{
    "name": "Display info",
    "version": "1",
    "manifest_version": 2,
    "background": {
        "scripts": ["background.js"]
    },
    "browser_action": {
        "default_title": "Open popup to display info"
    }
}
chrome.browserAction.onClicked.addListener(function() {
    chrome.windows.create({
        url: chrome.runtime.getURL('/display.html'),
    });
});
<meta charset="utf-8">
<body style="white-space:pre">
<script src="display.js"></script>
setInterval(function() {
    document.body.textContent =
        '\nWindow offset: ' + window.screenX + ',' + window.screenY +
        '\nScreen size  : ' + screen.width + 'x' + screen.height +
        '\nScreen offset: ' + screen.left + ',' + screen.top;
    chrome.windows.get(chrome.windows.WINDOW_ID_CURRENT, function(win) {
        document.body.insertAdjacentText('beforeend',
            '\nExtension window offset : ' + win.left + ',' + win.top);
    });
}, 200);

以上API不是特定于扩展的。您还可以运行下面的代码段并移动窗口以查看值。

<body style="white-space:pre">
<script>
setInterval(function() {
    document.body.textContent =
        '\nWindow offset: ' + window.screenX + ',' + window.screenY +
        '\nScreen size  : ' + screen.width + 'x' + screen.height +
        '\nScreen offset: ' + screen.left + ',' + screen.top;
}, 200);
</script>
 类似资料:
  • 多显示器系统 返回上级 Windows 98和Windows NT 5.0可以支持在一个单独的系统中存在多个显示设备和显示器。多显示器架构(通常简称为“MultiMon”)使操作系统使用两个或多个显示设备和显示器来建立一个逻辑桌面成为可能。举例来说,在一个有两台显示器的系统中,用户可以在其中的任何一个显示器上显示他的应用程序,或者将窗口从一个窗口中拖到另一个窗口中。 这一章的内容包含了如何在一个多

  • 我需要显示一个多行的只读文本,哪个控件可以用来显示?它应该只显示文本,就像标签一样,但是标签不支持多行? 谢谢你的提示:-)

  • 我被困在我的项目上,我还有两天的时间,所以我希望你们能帮助我。 我的JFrame"UserManager"显示用户的信息,这些信息是: 姓名、地址、电话号码等 当我必须显示BankAccount对象时,我的问题就来了:因为每个用户都可以拥有无限数量的银行账户——每个账户都存储在一个名为“ownedAccounts”的Arraylist中——我想在JFrame中创建小面板。 实例化JPanel并不是

  • 我试图通过选择符合以下条件的歌曲节点来转换上述XML: 状态='已发布' 如果匹配Data/Record/@Id的 /AUTH/AUTHOR_ID的AUTH/HIDE值为true,则不显示ART/TYPE(在这种情况下,Id=1826155) 所需的XML输出应包括Type、所有作者和标题。第二个歌曲类型在此示例中隐藏(因为HIDE=true对于主要作者): 我开始尝试每种方法,但发现我无法显示与

  • 我想要一个像这样的Mp3播放器。我的搜索脚本显示每页10个结果。我想为每个搜索结果项插入一个mp3。 > 当我点击播放时,播放器正常打开,当我点击停止时,播放器正常停止,但是当我点击播放并在另一个结果上点击播放时,第一个没有停止,第二个打开正常... 当我点击“播放”时,我需要自动播放mp3;当我点击“停止”时,玩家必须停止。 HTML: 小提琴。

  • 描述 (Description) 您可以根据窗口的宽度和高度创建全屏模式。 例子 (Example) 以下示例演示了在Foundation中使用full screen modal - <!doctype html> <head> <meta charset = "utf-8" /> <meta http-equiv = "x-ua-compatible" conten