- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Firefox Quantum 最终于 2017 年 11 月 14 日发布。引自此link :
In the past, you could develop Firefox extensions using one of three different systems: XUL/XPCOM overlays, bootstrapped extensions, or the Add-on SDK. By the end of November 2017, WebExtensions APIs will be the only way to develop Firefox extensions, and the other systems will be deprecated.
使用 Firefox 57 Quantum 和 Web 扩展 API,我想制作一个能够在多个屏幕上运行的扩展。此扩展程序将用于显示多屏幕仪表板。
它的想法很简单。如果检测到两个或更多屏幕,则每次启动的 Firefox 都会以全屏模式为每个监视器打开一个新窗口。我可以全屏显示,但在打开另一台显示器并检测连接了多少台显示器时遇到问题。
使用 browser.windows
API 创建另一个新标签页,这里是一些代码片段:
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);
});
});
});
很明显,我上面的解决方案是针对两个显示器进行硬编码并将 left
参数设置为 1366 px,因此如果屏幕分辨率不等于 1366x768 或者有更多分辨率,则此解决方案将无法正常工作而不是连接两个显示器。
因此,是否有任何 API 或更好的方法来检测连接了多少台显示器并检查它们的分辨率? Web 扩展 API 是否具有检测多个监视器和分辨率值的功能?如果没有,可能的解决方法是什么?
最佳答案
没有现成可用的扩展 API 来回答您的问题,但有足够的构建 block 以其他方式回答问题。
当前窗口相对于显示器的位置可通过以下方式获得:
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 可以通过以下方式检索正在显示窗口的显示器的大小:
screen.width
- https://developer.mozilla.org/en-US/docs/Web/API/Screen/width screen.height
- https://developer.mozilla.org/en-US/docs/Web/API/Screen/height Firefox 甚至提供读取当前显示器相对于所有其他显示器的位置的能力。如果您有两个显示器并且当前屏幕实际上位于另一个屏幕的右侧,则非标准 Firefox-only screen.left
属性具有非零值。
sreen.left
- https://developer.mozilla.org/en-US/docs/Web/API/Screen/left sreen.top
- https://developer.mozilla.org/en-US/docs/Web/API/Screen/top 注意:当 privacy.resistFingerprinting
首选项在 Firefox 中打开时,上述所有 API 都会返回虚拟值。不过,您仍然可以通过 chrome.windows.get
扩展 API 查询窗口大小和位置。
如果您创建一个虚拟窗口并在屏幕上四处移动它,那么您可以使用上述 API 来推断有关屏幕的信息,并最终构建可用显示和大小的完整 View 。这是打印上述信息的示例扩展。您可以点击按钮打开一个窗口,然后手动移动窗口。
这可以通过打开一个非常窄的弹出窗口并使用 chrome.windows.update
移动它来自动完成。如果左/上偏移量太大,则窗口将粘在屏幕边缘(例如,如果在 1024px 宽的屏幕上将 99999 作为左偏移量传递给宽度为 100 的窗口,则左偏移量变为924).
list .json
{
"name": "Display info",
"version": "1",
"manifest_version": 2,
"background": {
"scripts": ["background.js"]
},
"browser_action": {
"default_title": "Open popup to display info"
}
}
后台.js
chrome.browserAction.onClicked.addListener(function() {
chrome.windows.create({
url: chrome.runtime.getURL('/display.html'),
});
});
display.html
<meta charset="utf-8">
<body style="white-space:pre">
<script src="display.js"></script>
显示.js
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>
关于javascript - 用于多显示器和全屏的 Firefox Web 扩展 APIS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47303083/
我已经为桌面和移动 Firefox 开发了一些 Firefox 插件(扩展),但现在我无法将插件/扩展安装到在 Firefox OS 中运行的浏览器中(我正在使用模拟器插件)。请注意,我不想创建一个传
可以将选项卡/网址从移动 Firefox 发送到桌面 Firefox 浏览器,但是否可以以相反的方式执行此操作?从桌面版 Firefox 到移动版 Firefox,并像其他方向一样自动加载。我找不到除
我想等待 Firefox-Browser-Events (sessionstore-windows-restored, user-interaction-inactive,..) 以清除历史记录。我的
我在公司网络中,想为 Firefox 安装一些开发人员工具。不幸的是,政策禁止 Firefox 直接访问互联网,但还有其他浏览器可以访问互联网。现在:如何在没有 Firefox 的情况下直接下载 xp
是否有用于在 firefox 中执行选择性缓存的插件或方法?我可以disable caching entirely ,但我仍然希望能够缓存一些需要几秒钟才能加载的大型 javascript 库 (ex
我目前正在将 Chrome 扩展程序转换为 Firefox 插件,并希望复制 chrome.storage.sync 功能。 但是,我无法使用 simple-storage 找到是否由 Firefox
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
所以,我使用这个代码: var options = { enableHighAccuracy: true, timeout: 2000, maximumAge: 100 }; navi
有没有办法打开 Firefox 并强制它在启动时加载临时加载项(webextension)?通常我必须手动去about:debugging并选择我硬盘上的扩展名。我正在寻找一个可以在加载 Firefo
我正在密切关注教程 here当我尝试创建 Firefox 扩展时。我的扩展有以下树: backtosearch +-chrome +-content backtosearch.
如何从代码中正确地重启 firefox(没有任何“恢复 session ”的东西并且使用与以前相同的窗口)? 我知道 bash 脚本进程中“firefox-bin”的 pid,并且我已将自定义插件加载
自从 Firefox 的最后几次更新以来,我们心爱的 Firebug 已集成到 Firefox 开发人员工具中,并且包括我在内的很多人 don't like what happened到 Firebu
当你在某处上传图片时,在使用chrome时,你可以看到状态栏实际上显示了上传的“状态”,即上传完成的百分比。 Firefox 的状态栏有没有办法显示这个上传状态? 最佳答案 用谷歌搜索这个,发现这个:
例如 Chrome 保存在这里:~Library/Application Support/Google/Chrome/Default/Current Tabs和 Safari 在这里 ~/Librar
当火狐开发者版推出时,我很高兴,我可以使用WebIde、响应式设计工具、滴管等……今天我受够了。 里面有很多bug,我就不一一列举我和我的同事发送和批准了多少bug了…… 我在 google 中搜索过
我在 Ubuntu 上使用 Firefox,版本 39.0。我正在尝试调试一个附加组件,并希望在 chrome 权限下运行一些 JavaScript。根据 this page我应该能够在浏览器控制台中
几天前,我更改了我的网站的图标:打开网站后,它可以很好地工作: 我的网站也在我的书签中,但是显示了旧的收藏夹图标: 我已经看过here,但是答案并没有解决我的问题。 解决方法可能非常简单,但是到目前为
我正在使用web API从Firefox开发一个 native 消息传递应用程序。该扩展应该调用一个解析stdin的应用程序,然后基于它解析的一些数据调用我的另一个rust应用程序,但是出于显而易见的
在 Firefox 中有插件和扩展。你能解释一下为什么这些插件有不同的名称和标签吗?它们是否差异如此之大,以至于需要不同的名称?我认为区分这些东西有点不自然,扩展具有越来越多的功能,与插件相比它们缺少
我正在使用附加构建器和附加 SDK 编写 Firefox 扩展。到目前为止,我已经能够解决任何限制,而无需迁移到 XUL。但是,我遇到了障碍。 我的扩展程序有一个长时间运行的进程,可能会阻塞,因此我需
我是一名优秀的程序员,十分优秀!