一、chrome.fontSettings
使用 chrome.fontSettings
API 管理 Chrome 的字体设置。
权限
fontSettings
要使用 Font Settings API,您必须在扩展程序中声明 "fontSettings"
权限 清单。例如:
{"name": "My Font Settings Extension","description": "Customize your fonts","version": "0.2","permissions": ["fontSettings"],...
}
概念和用法
Chrome 允许某些字体设置取决于特定的常规字体系列和语言 脚本。例如, sans-serif 简体中文使用的字体可能与该字体不同 用于 serif 日语。
Chrome 支持的通用字体系列基于 CSS 通用字体系列, GenericReference下列出。当网页指定了通用字体系列时,Chrome 会选择 根据相应设置调整字体。如果未指定通用字体系列,则 Chrome 会使用 “包量”规则的通用字体系列。
当网页指定了语言时,Chrome 会根据 相应的语言脚本。如果未指定语言,则 Chrome 会使用默认设置 或全局、脚本。
支持的语言脚本由 ISO 15924 脚本代码指定,并列在下方 ScriptCode。从技术上讲,Chrome 设置并不是严格按脚本进行设置,还取决于 语言。例如,当 网页指定了俄语,并且该字体不仅用于西里尔文字, 字体覆盖的所有内容(如拉丁文)。
示例
以下代码可获取阿拉伯语标准字体。
chrome.fontSettings.getFont({ genericFamily: 'standard', script: 'Arab' },function(details) { console.log(details.fontId); }
);
下一个代码段用于设置日语的 sans-serif 字体。
chrome.fontSettings.setFont({ genericFamily: 'sansserif', script: 'Jpan', fontId: 'MS PGothic' }
);
若要试用此 API,请安装 chrome-extension-samples 中的 fontSettings API 示例 存储库
更多参考:chrome.fontSettings | API | Chrome for Developers
二、chrome.fontSettings c++接口定义:
1、font_settings.json 接口描述文件:
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.[{"namespace": "fontSettings","description": "Use the <code>chrome.fontSettings</code> API to manage Chrome's font settings.","types": [{"id": "FontName","type": "object","description": "Represents a font name.","properties": {"fontId": {"type": "string","description": "The font ID."},"displayName": {"type": "string","description": "The display name of the font."}}},{"id": "ScriptCode","type": "string","enum": [ "Afak", "Arab", "Armi", "Armn", "Avst", "Bali", "Bamu", "Bass", "Batk","Beng", "Blis", "Bopo", "Brah", "Brai", "Bugi", "Buhd", "Cakm", "Cans","Cari", "Cham", "Cher", "Cirt", "Copt", "Cprt", "Cyrl", "Cyrs", "Deva","Dsrt", "Dupl", "Egyd", "Egyh", "Egyp", "Elba", "Ethi", "Geor", "Geok","Glag", "Goth", "Gran", "Grek", "Gujr", "Guru", "Hang", "Hani", "Hano","Hans", "Hant", "Hebr", "Hluw", "Hmng", "Hung", "Inds", "Ital", "Java","Jpan", "Jurc", "Kali", "Khar", "Khmr", "Khoj", "Knda", "Kpel", "Kthi","Lana", "Laoo", "Latf", "Latg", "Latn", "Lepc", "Limb", "Lina", "Linb","Lisu", "Loma", "Lyci", "Lydi", "Mand", "Mani", "Maya", "Mend", "Merc","Mero", "Mlym", "Moon", "Mong", "Mroo", "Mtei", "Mymr", "Narb", "Nbat","Nkgb", "Nkoo", "Nshu", "Ogam", "Olck", "Orkh", "Orya", "Osma", "Palm","Perm", "Phag", "Phli", "Phlp", "Phlv", "Phnx", "Plrd", "Prti", "Rjng","Roro", "Runr", "Samr", "Sara", "Sarb", "Saur", "Sgnw", "Shaw", "Shrd","Sind", "Sinh", "Sora", "Sund", "Sylo", "Syrc", "Syre", "Syrj", "Syrn","Tagb", "Takr", "Tale", "Talu", "Taml", "Tang", "Tavt", "Telu", "Teng","Tfng", "Tglg", "Thaa", "Thai", "Tibt", "Tirh", "Ugar", "Vaii", "Visp","Wara", "Wole", "Xpeo", "Xsux", "Yiii", "Zmth", "Zsym", "Zyyy" ],"description": "An ISO 15924 script code. The default, or global, script is represented by script code \"Zyyy\"."},{"id": "GenericFamily","type": "string","enum": ["standard", "sansserif", "serif", "fixed", "cursive", "fantasy", "math"],"description": "A CSS generic font family."},{"id": "LevelOfControl","description": "One of<br><var>not_controllable</var>: cannot be controlled by any extension<br><var>controlled_by_other_extensions</var>: controlled by extensions with higher precedence<br><var>controllable_by_this_extension</var>: can be controlled by this extension<br><var>controlled_by_this_extension</var>: controlled by this extension","type": "string","enum": ["not_controllable", "controlled_by_other_extensions", "controllable_by_this_extension", "controlled_by_this_extension"]}],"functions": [{"name": "clearFont","description": "Clears the font set by this extension, if any.","parameters": [{"name": "details","type": "object","properties": {"script": {"$ref": "ScriptCode","description": "The script for which the font should be cleared. If omitted, the global script font setting is cleared.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font should be cleared."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getFont","description": "Gets the font for a given script and generic font family.","parameters": [{"name": "details","type": "object","properties": {"script": {"$ref": "ScriptCode","description": "The script for which the font should be retrieved. If omitted, the font setting for the global script (script code \"Zyyy\") is retrieved.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font should be retrieved."}}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"fontId": {"type": "string","description": "The font ID. Rather than the literal font ID preference value, this may be the ID of the font that the system resolves the preference value to. So, <var>fontId</var> can differ from the font passed to <code>setFont</code>, if, for example, the font is not available on the system. The empty string signifies fallback to the global script font setting."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setFont","description": "Sets the font for a given script and generic font family.","parameters": [{"name": "details","type": "object","properties": {"script": {"$ref": "ScriptCode","description": "The script code which the font should be set. If omitted, the font setting for the global script (script code \"Zyyy\") is set.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font should be set."},"fontId": {"type": "string","description": "The font ID. The empty string means to fallback to the global script font setting."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getFontList","description": "Gets a list of fonts on the system.","parameters": [],"returns_async": {"name": "callback","parameters": [{"name": "results","type": "array","items": { "$ref": "FontName" }}]}},{"name": "clearDefaultFontSize","description": "Clears the default font size set by this extension, if any.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getDefaultFontSize","description": "Gets the default font size.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setDefaultFontSize","description": "Sets the default font size.","parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "clearDefaultFixedFontSize","description": "Clears the default fixed font size set by this extension, if any.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getDefaultFixedFontSize","description": "Gets the default size for fixed width fonts.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setDefaultFixedFontSize","description": "Sets the default size for fixed width fonts.","parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "clearMinimumFontSize","description": "Clears the minimum font size set by this extension, if any.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": []}},{"name": "getMinimumFontSize","description": "Gets the minimum font size.","parameters": [{"name": "details","type": "object","optional": true,"description": "This parameter is currently unused.","properties": {}}],"returns_async": {"name": "callback","optional": true,"parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}},{"name": "setMinimumFontSize","description": "Sets the minimum font size.","parameters": [{"name": "details","type": "object","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."}}}],"returns_async": {"name": "callback","optional": true,"parameters": []}}],"events": [{"name": "onFontChanged","description": "Fired when a font setting changes.","parameters": [{"type": "object","name": "details","properties": {"fontId": {"type": "string","description": "The font ID. See the description in <code>getFont</code>."},"script": {"$ref": "ScriptCode","description": "The script code for which the font setting has changed.","optional": true},"genericFamily": {"$ref": "GenericFamily","description": "The generic font family for which the font setting has changed."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]},{"name": "onDefaultFontSizeChanged","description": "Fired when the default font size setting changes.","parameters": [{"type": "object","name": "details","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]},{"name": "onDefaultFixedFontSizeChanged","description": "Fired when the default fixed font size setting changes.","parameters": [{"type": "object","name": "details","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]},{"name": "onMinimumFontSizeChanged","description": "Fired when the minimum font size setting changes.","parameters": [{"type": "object","name": "details","properties": {"pixelSize": {"type": "integer","description": "The font size in pixels."},"levelOfControl": {"$ref": "LevelOfControl","description": "The level of control this extension has over the setting."}}}]}]}
]
2、font_settings.json生成的c++文件:
out\Debug\gen\chrome\common\extensions\api\font_settings.h
out\Debug\gen\chrome\common\extensions\api\font_settings.cc
3、font_settings api接口定义文件:
chrome\browser\extensions\api\font_settings\font_settings_api.h
chrome\browser\extensions\api\font_settings\font_settings_api.cc
namespace content {
class BrowserContext;
}namespace extensions {class FontSettingsEventRouter;// The profile-keyed service that manages the font_settings extension API.
// This is not an EventRouter::Observer (and does not lazily initialize) because
// doing so caused a regression in perf tests. See crbug.com/163466.
class FontSettingsAPI : public BrowserContextKeyedAPI {public:explicit FontSettingsAPI(content::BrowserContext* context);~FontSettingsAPI() override;// BrowserContextKeyedAPI implementation.static BrowserContextKeyedAPIFactory<FontSettingsAPI>* GetFactoryInstance();private:friend class BrowserContextKeyedAPIFactory<FontSettingsAPI>;// BrowserContextKeyedAPI implementation.static const char* service_name() {return "FontSettingsAPI";}static const bool kServiceIsNULLWhileTesting = true;std::unique_ptr<FontSettingsEventRouter> font_settings_event_router_;
};// fontSettings.clearFont API function.
class FontSettingsClearFontFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearFont", FONTSETTINGS_CLEARFONT)protected:// RefCounted types have non-public destructors, as with all extension// functions in this file.~FontSettingsClearFontFunction() override {}// ExtensionFunction:ResponseAction Run() override;
};// fontSettings.getFont API function.
class FontSettingsGetFontFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getFont", FONTSETTINGS_GETFONT)protected:~FontSettingsGetFontFunction() override {}// ExtensionFunction:ResponseAction Run() override;
};// fontSettings.setFont API function.
class FontSettingsSetFontFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setFont", FONTSETTINGS_SETFONT)protected:~FontSettingsSetFontFunction() override {}// ExtensionFunction:ResponseAction Run() override;
};// fontSettings.getFontList API function.
class FontSettingsGetFontListFunction : public ExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getFontList",FONTSETTINGS_GETFONTLIST)protected:~FontSettingsGetFontListFunction() override {}// ExtensionFunction:ResponseAction Run() override;private:void FontListHasLoaded(base::Value::List list);ResponseValue CopyFontsToResult(const base::Value::List& fonts);
};// Base class for extension API functions that clear a browser font pref.
class ClearFontPrefExtensionFunction : public ExtensionFunction {protected:~ClearFontPrefExtensionFunction() override {}// ExtensionFunction:ResponseAction Run() override;// Implementations should return the name of the preference to clear, like// "webkit.webprefs.default_font_size".virtual const char* GetPrefName() = 0;
};// Base class for extension API functions that get a browser font pref.
class GetFontPrefExtensionFunction : public ExtensionFunction {protected:~GetFontPrefExtensionFunction() override {}// ExtensionFunction:ResponseAction Run() override;// Implementations should return the name of the preference to get, like// "webkit.webprefs.default_font_size".virtual const char* GetPrefName() = 0;// Implementations should return the key for the value in the extension API,// like "pixelSize".virtual const char* GetKey() = 0;
};// Base class for extension API functions that set a browser font pref.
class SetFontPrefExtensionFunction : public ExtensionFunction {protected:~SetFontPrefExtensionFunction() override {}// ExtensionFunction:ResponseAction Run() override;// Implementations should return the name of the preference to set, like// "webkit.webprefs.default_font_size".virtual const char* GetPrefName() = 0;// Implementations should return the key for the value in the extension API,// like "pixelSize".virtual const char* GetKey() = 0;
};// The following are get/set/clear API functions that act on a browser font
// pref.class FontSettingsClearDefaultFontSizeFunction: public ClearFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearDefaultFontSize",FONTSETTINGS_CLEARDEFAULTFONTSIZE)protected:~FontSettingsClearDefaultFontSizeFunction() override {}// ClearFontPrefExtensionFunction:const char* GetPrefName() override;
};class FontSettingsGetDefaultFontSizeFunction: public GetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFontSize",FONTSETTINGS_GETDEFAULTFONTSIZE)protected:~FontSettingsGetDefaultFontSizeFunction() override {}// GetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsSetDefaultFontSizeFunction: public SetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFontSize",FONTSETTINGS_SETDEFAULTFONTSIZE)protected:~FontSettingsSetDefaultFontSizeFunction() override {}// SetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsClearDefaultFixedFontSizeFunction: public ClearFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearDefaultFixedFontSize",FONTSETTINGS_CLEARDEFAULTFIXEDFONTSIZE)protected:~FontSettingsClearDefaultFixedFontSizeFunction() override {}// ClearFontPrefExtensionFunction:const char* GetPrefName() override;
};class FontSettingsGetDefaultFixedFontSizeFunction: public GetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getDefaultFixedFontSize",FONTSETTINGS_GETDEFAULTFIXEDFONTSIZE)protected:~FontSettingsGetDefaultFixedFontSizeFunction() override {}// GetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsSetDefaultFixedFontSizeFunction: public SetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setDefaultFixedFontSize",FONTSETTINGS_SETDEFAULTFIXEDFONTSIZE)protected:~FontSettingsSetDefaultFixedFontSizeFunction() override {}// SetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsClearMinimumFontSizeFunction: public ClearFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.clearMinimumFontSize",FONTSETTINGS_CLEARMINIMUMFONTSIZE)protected:~FontSettingsClearMinimumFontSizeFunction() override {}// ClearFontPrefExtensionFunction:const char* GetPrefName() override;
};class FontSettingsGetMinimumFontSizeFunction: public GetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.getMinimumFontSize",FONTSETTINGS_GETMINIMUMFONTSIZE)protected:~FontSettingsGetMinimumFontSizeFunction() override {}// GetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};class FontSettingsSetMinimumFontSizeFunction: public SetFontPrefExtensionFunction {public:DECLARE_EXTENSION_FUNCTION("fontSettings.setMinimumFontSize",FONTSETTINGS_SETMINIMUMFONTSIZE)protected:~FontSettingsSetMinimumFontSizeFunction() override {}// SetFontPrefExtensionFunction:const char* GetPrefName() override;const char* GetKey() override;
};} // namespace extensions