flash.system.Capabilities.screenResolutionY 和 flash.system.Capabilities.screenResolutionX 的报告值是不是不正确

Posted

技术标签:

【中文标题】flash.system.Capabilities.screenResolutionY 和 flash.system.Capabilities.screenResolutionX 的报告值是不是不正确?【英文标题】:Are the reported values for flash.system.Capabilities.screenResolutionY and flash.system.Capabilities.screenResolutionX ever incorrect?flash.system.Capabilities.screenResolutionY 和 flash.system.Capabilities.screenResolutionX 的报告值是否不正确? 【发布时间】:2015-11-02 18:02:14 【问题描述】:

我有一个网站,我使用 .swf 文件收集 Flash 屏幕分辨率数据和来自 javascript 的相同数据,并将其发送到我的服务器。

对于某些用户来说,这个数据看起来是错误的 - Flash 分辨率偶尔会大于或小于浏览器中报告的屏幕分辨率。

例如,一位用户在 JavaScript 中报告了1600x900 分辨率屏幕,但在 Flash 报告中屏幕尺寸为1366x768

我使用的 ActionScript 属性是:

    flash.system.Capabilities.screenResolutionX flash.system.Capabilities.screenResolutionY

我使用的 JavaScript 属性是:

    window.screen.width window.screen.height

在任何情况下,人们会期望这些值在 ActionScript 或 JavaScript 中始终不正确吗?

【问题讨论】:

尝试验证您的用户是否拥有多个屏幕,因为 flash 返回的值仅适用于主屏幕以及 flash 播放器启动的时间。 确实,它们不匹配的情况很可能是浏览器不在主屏幕上的情况——所以 JS 报告它实际所在的屏幕,而 AS3 报告主屏幕。跨度> 【参考方案1】:

我认为问题在于 Flash 播放器的 flash.system.Capabilities.screenResolutionX/Y 属性仅报告主显示器的分辨率。 (正如@akmozo 对问题的cmets 所述)

来自documentation:(强调我的)

此属性不会随着用户的屏幕分辨率而更新,而仅指示 Flash Player 或 Adob​​e AIR 应用程序启动时的分辨率。此外,该值仅指定主屏幕

在 JS 中(这可能取决于浏览器),window.screen.width/height 将根据浏览器窗口所在的实际监视器报告。

因此,您的差异很可能发生在浏览器窗口在主显示器上的情况下。 (所以AS3报告主显示,JS报告实际使用的显示)

如果您需要使用 Flash 并获得准确的值,我建议您使用以下技术之一:

    使用stage.fullScreenWidthstage.fullScreenHeight 值,这应该会为您提供当前的显示器分辨率。

    使用ExternalInterface 并从 JavaScript 获取数据:

    if(ExternalInterface.available)
        var screenW:int = int(ExternalInterface.call("window.screen.width"));
        var screenH:int = int(ExternalInterface.call("window.screen.height"));
    
    

【讨论】:

以上是关于flash.system.Capabilities.screenResolutionY 和 flash.system.Capabilities.screenResolutionX 的报告值是不是不正确的主要内容,如果未能解决你的问题,请参考以下文章