一、前端通过window.screen接口获取屏幕分辨率 尺寸 颜色深度,横屏竖屏信息。
二、window.screen c++接口实现:
1、third_party\blink\renderer\core\frame\screen.idl
// https://drafts.csswg.org/cssom-view/#the-screen-interface[Exposed=Window
] interface Screen : EventTarget {[HighEntropy=Direct, Measure] readonly attribute long availWidth;[HighEntropy=Direct, Measure] readonly attribute long availHeight;[HighEntropy=Direct, Measure] readonly attribute long width;[HighEntropy=Direct, Measure] readonly attribute long height;[HighEntropy=Direct, Measure] readonly attribute unsigned long colorDepth;// pixelDepth() is an alias for colorDepth(), no need to instrument it twice.[HighEntropy, Measure] readonly attribute unsigned long pixelDepth;// Non-standard[HighEntropy=Direct, Measure] readonly attribute long availLeft;[HighEntropy=Direct, Measure] readonly attribute long availTop;// Fired when the window’s screen or that screen's attributes change.// https://w3c.github.io/window-placement/[SecureContext, HighEntropy, MeasureAs=WindowScreenChange] attribute EventHandler onchange;// Whether the device’s visual output extends over multiple screens.// https://w3c.github.io/window-placement/[SecureContext, HighEntropy=Direct, MeasureAs=WindowScreenIsExtended] readonly attribute boolean isExtended;
};
2、接口实现c++
third_party\blink\renderer\core\frame\screen.h
third_party\blink\renderer\core\frame\screen.cc
namespace display {
struct ScreenInfo;
}namespace blink {class LocalDOMWindow;class CORE_EXPORT Screen : public EventTarget,public ExecutionContextClient,public Supplementable<Screen> {DEFINE_WRAPPERTYPEINFO();public:Screen(LocalDOMWindow*, int64_t display_id);static bool AreWebExposedScreenPropertiesEqual(const display::ScreenInfo& prev,const display::ScreenInfo& current);int height() const;int width() const;unsigned colorDepth() const;unsigned pixelDepth() const;int availLeft() const;int availTop() const;int availHeight() const;int availWidth() const;void Trace(Visitor*) const override;// EventTarget:const WTF::AtomicString& InterfaceName() const override;ExecutionContext* GetExecutionContext() const override;// Whether the device’s visual output extends over multiple screens.// https://w3c.github.io/window-placement/bool isExtended() const;// Fired when the window’s screen or that screen's attributes change.// https://w3c.github.io/window-placement/DEFINE_ATTRIBUTE_EVENT_LISTENER(change, kChange)// Not web-exposed; for internal usage only.static constexpr int64_t kInvalidDisplayId = -1;int64_t DisplayId() const { return display_id_; }void UpdateDisplayId(int64_t display_id) { display_id_ = display_id; }protected:// Helpers to access screen information.gfx::Rect GetRect(bool available) const;const display::ScreenInfo& GetScreenInfo() const;// The internal id of the underlying display, to support multi-screen devices.int64_t display_id_;
};} // namespace blink
三、总结:
修改屏幕信息指纹只需要在screen.cc文件种修改即可。