如何使用插件 SDK 确定屏幕尺寸?

How can I determine the screen size using addon SDK?

如何使用插件 SDK 获取屏幕尺寸?

var w = screen.width/2;

给我一个错误:Message: ReferenceError: screen is not defined

这会起作用:

var screen = require('sdk/window/utils').getMostRecentBrowserWindow().screen;
console.log(screen.width);

您可以使用已关联到您的附加组件的 window;它可能更安全,因为即使最后一个可见的 window 关闭但 firefox 仍然打开(例如在 OS X 上)它仍然可以工作:

const { window: { screen }} = require("sdk/addon/window");
console.log(screen.width);

如果你想要多显示器支持,我有一个脚本,但你必须理解它。它使用 XPCOM,并且需要一个范围。此脚本仅沿 x 轴检查,您还应沿 y 轴检查。

所以这里的脚本将检测 x 平面中的所有显示器,如果它落在主屏幕 0-20 坐标的 y 平面中,我不推荐这种方法。

var sm = Cc['@mozilla.org/gfx/screenmanager;1'].getService(Ci.nsIScreenManager);

function getScreens() {
    var screen = null;
    var screens = [];
    var screenManager = sm;
    var min = 0;
    var max = 0;
    for (x = 0; x < 15000; x += 600) {
        var s = screenManager.screenForRect(x, 20, 10, 10);
        if (s != screen) {
            screen = s;
            var left = {},
                top = {},
                width = {},
                height = {};
            screenManager.primaryScreen.GetRect(left, top, width, height);
            screens.push({
                width: width.value,
                height: height.value,
                min: min,
                max: min + width.value
            });
            min += width.value;
        }
    }
    return screens;
}

var screens = getScreens();
console.log('screens:', screens);

这是我推荐的方法

我需要检测所有监视器尺寸,并且不得不求助于 jsctypes,如果您需要它,它在这里:https://github.com/Noitidart/NativeShot/blob/master/modules/workers/MainWorker.js#L853-L1523

该代码非常长,那是因为它获取所有监视器并截取它们的屏幕截图。因此,您将只想提取监视器部分。如果您需要帮助,我可以为您完成。