рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЯреВрд▓рдмрд╛рд░ рдЖрдЗрдХреЙрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдореМрдЬреВрджрд╛ рдкреЗрдЬ рдХреА рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдПрдВ.
рдЦрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдПрдХ рдРрд╕рд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ Chrome Web Store рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд╛рд▓реЗ рдкреЗрдЬреЛрдВ рдХреА рд╕реНрдЯрд╛рдЗрд▓ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХреЗ.
рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ, рд╣рдо рдЖрдкрдХреЛ рдпреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдПрдВрдЧреЗ:
- рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реЗрд╡рд╛ рд╡рд░реНрдХрд░ рдХреЛ рдЗрд╡реЗрдВрдЯ рдХреЛрдСрд░реНрдбрд┐рдиреЗрдЯрд░ рдХреЗ рддреМрд░ рдкрд░ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
"activeTab"
рдЕрдиреБрдорддрд┐ рдХреА рдорджрдж рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирд┐рдЬрддрд╛ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦреЗрдВ.- рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЯреВрд▓рдмрд╛рд░ рдЖрдЗрдХреЙрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддрдм рдХреЛрдб рдЪрд▓рд╛рдПрдВ.
- Scripting API рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рд╕реНрдЯрд╛рдЗрд▓ рд╢реАрдЯ рдбрд╛рд▓реЗрдВ рдФрд░ рд╣рдЯрд╛рдПрдВ.
- рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ.
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ
рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдпрд╣ рдорд╛рдирд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡реЗрдм рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрднрд╡ рд╣реИ. рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, Hello World рд▓реЗрдЦ рдкрдврд╝реЗрдВ.
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдирд╛
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, focus-mode
рдирд╛рдо рдХреА рдПрдХ рдирдИ рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдмрдирд╛рдПрдВ. рдЗрд╕рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрдВрдЧреА. рдЕрдЧрд░ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ GitHub рд╕реЗ рдкреВрд░рд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рдкрд╣рд▓рд╛ рдЪрд░рдг: рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдбреЗрдЯрд╛ рдФрд░ рдЖрдЗрдХреЙрди рдЬреЛрдбрд╝рдирд╛
manifest.json
рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдпрд╣ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ.
{
"manifest_version": 3,
"name": "Focus Mode",
"description": "Enable focus mode on Chrome's official Extensions and Chrome Web Store documentation.",
"version": "1.0",
"icons": {
"16": "images/icon-16.png",
"32": "images/icon-32.png",
"48": "images/icon-48.png",
"128": "images/icon-128.png"
}
}
рдЗрди рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, "рд╣рд░ рдЯреИрдм рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдирд╛" рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рджреЗрдЦреЗрдВ. рдЗрд╕рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ metadata рдФрд░ рдЖрдЗрдХреЙрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рджреА рдЧрдИ рд╣реИ.
images
рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЙрд╕рдореЗрдВ рдЖрдЗрдХреЙрди рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ.
рджреВрд╕рд░рд╛ рдЪрд░рдг: рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛
рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕реЗрд╡рд╛ рд╡рд░реНрдХрдЕрд░ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╡реЗрдВрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрдХрд░, JavaScript рдХреЗ рдЦрд╛рд╕ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ. рдпреЗ рдЗрд╡реЗрдВрдЯ рдореИрдиреЗрдЬ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╝рд░реВрд░рдд рди рд╣реЛрдиреЗ рдкрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ.
manifest.json
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд░реНрд╡рд┐рд╕ рд╡рд░реНрдХрд░ рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдХреЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ:
{
...
"background": {
"service_worker": "background.js"
},
...
}
background.js
рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
chrome.runtime.onInstalled.addListener(() => {
chrome.action.setBadgeText({
text: "OFF",
});
});
рд╣рдорд╛рд░рд╛ рд╕реЗрд╡рд╛ рд╡рд░реНрдХрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ runtime.onInstalled()
рдЗрд╡реЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрдиреЗрдЧрд╛. рдЗрд╕ рддрд░реАрдХреЗ рд╕реЗ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдпрд╛ рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рдЯрд╛рд╕реНрдХ рдкреВрд░реЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ. рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реЗрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдЯреЗрдВрд╢рди Storage API рдФрд░
IndexedDB рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ. рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╕рд┐рд░реНрдлрд╝ рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ. рдЗрд╕рд▓рд┐рдП, рд╣рдо рдРрдХреНрд╢рди рдХреЗ рдмреИрдЬ рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдпрд╣ рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди 'рдЪрд╛рд▓реВ рд╣реИ' рдпрд╛ 'рдмрдВрдж рд╣реИ'.
рддреАрд╕рд░рд╛ рдЪрд░рдг: рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдРрдХреНрд╢рди рдЪрд╛рд▓реВ рдХрд░рдирд╛
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдРрдХреНрд╢рди, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЯреВрд▓рдмрд╛рд░ рдЖрдЗрдХреЙрди рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рддрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдЬрдм рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдЗрдХреЙрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдЧрд╛, рддреЛ рдпрд╣ рдХреБрдЫ рдХреЛрдб рдЪрд▓рд╛рдПрдЧрд╛ (рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ) рдпрд╛ рдХреЛрдИ рдкреЙрдк-рдЕрдк рджрд┐рдЦрд╛рдПрдЧрд╛. manifest.json
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдРрдХреНрд╢рди рдХрд╛ рдПрд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
{
...
"action": {
"default_icon": {
"16": "images/icon-16.png",
"32": "images/icon-32.png",
"48": "images/icon-48.png",
"128": "images/icon-128.png"
}
},
...
}
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирд┐рдЬрддрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, activeTab рдХреА рдЕрдиреБрдорддрд┐ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛
activeTab
рдЕрдиреБрдорддрд┐ рд╕реЗ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЪрд╛рд▓реВ рдЯреИрдм рдкрд░ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ. рдЗрд╕рд╕реЗ, рдореМрдЬреВрджрд╛ рдЯреИрдм рдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рднреА рдорд┐рд▓рддреА рд╣реИ.
рдпрд╣ рдЕрдиреБрдорддрд┐ рддрдм рдЪрд╛рд▓реВ рд╣реЛрддреА рд╣реИ, рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдРрдХреНрд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ.
ЁЯТб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрд┐рди рдЕрдиреНрдп рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕реЗ, рдореЗрд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ activeTab рдХреА рдЕрдиреБрдорддрд┐ рдЪрд╛рд▓реВ рд╣реЛрддреА рд╣реИ?
- рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХрд╛ рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рджрдмрд╛рдирд╛.
- рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдореЗрдиреНрдпреВ рдХрд╛ рдХреЛрдИ рдЖрдЗрдЯрдо рдЪреБрдирдирд╛.
- рдСрдордиреАрдмреЙрдХреНрд╕ рд╕реЗ рдорд┐рд▓рд╛ рд╕реБрдЭрд╛рд╡ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛.
- рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдкреЙрдк-рдЕрдк рдЦреЛрд▓рдирд╛.
"activeTab"
рдЕрдиреБрдорддрд┐ рдХреА рдорджрдж рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рди-рдмреВрдЭрдХрд░ рдлрд╝реЛрдХрд╕ рдХрд┐рдП рдЧрдП рдЯреИрдм рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕рд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирд┐рдЬрддрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рд╣рддреА рд╣реИ. рдЗрд╕рдХрд╛ рдПрдХ рдФрд░ рдлрд╝рд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЕрдиреБрдорддрд┐ рд╕реЗ рдЬреБрдбрд╝реА рдЪреЗрддрд╛рд╡рдиреА рдирд╣реАрдВ рдорд┐рд▓рддреА.
"activeTab"
рдЕрдиреБрдорддрд┐ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдХреЗ рдЕрдиреБрдорддрд┐ рдХрд▓реЗрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
{
...
"permissions": ["activeTab"],
...
}
рдЪреМрдерд╛ рдЪрд░рдг: рдореМрдЬреВрджрд╛ рдЯреИрдм рдХреА рд╕реНрдерд┐рддрд┐ рдЯреНрд░реИрдХ рдХрд░рдирд╛
рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдРрдХреНрд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдпреВрдЖрд░рдПрд▓, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд╛рд▓реЗ рдкреЗрдЬ рд╕реЗ рдореИрдЪ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ рдореМрдЬреВрджрд╛ рдЯреИрдм рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдЕрдЧрд▓реА рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░реЗрдЧрд╛. background.js
рдореЗрдВ рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
const extensions = 'https://developer.chrome.com/docs/extensions';
const webstore = 'https://developer.chrome.com/docs/webstore';
chrome.action.onClicked.addListener(async (tab) => {
if (tab.url.startsWith(extensions) || tab.url.startsWith(webstore)) {
// Retrieve the action badge to check if the extension is 'ON' or 'OFF'
const prevState = await chrome.action.getBadgeText({ tabId: tab.id });
// Next state will always be the opposite
const nextState = prevState === 'ON' ? 'OFF' : 'ON';
// Set the action badge to the next state
await chrome.action.setBadgeText({
tabId: tab.id,
text: nextState,
});
}
});
рдкрд╛рдВрдЪрд╡рд╛рдВ рдЪрд░рдг: рд╕реНрдЯрд╛рдЗрд▓ рд╢реАрдЯ рдЬреЛрдбрд╝рдирд╛ рдпрд╛ рд╣рдЯрд╛рдирд╛
рдЕрдм рдкреЗрдЬ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ. focus-mode.css
рдирд╛рдо рдХреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдпрд╣ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ:
* {
display: none !important;
}
html,
body,
*:has(article),
article,
article * {
display: revert !important;
}
[role='navigation'] {
display: none !important;
}
article {
margin: auto;
max-width: 700px;
}
Scripting API рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рд╕реНрдЯрд╛рдЗрд▓ рд╢реАрдЯ рдбрд╛рд▓реЗрдВ рдпрд╛ рд╣рдЯрд╛рдПрдВ. рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ "scripting"
рдЕрдиреБрдорддрд┐ рдХрд╛ рдПрд▓рд╛рди рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ:
{
...
"permissions": ["activeTab", "scripting"],
...
}
рдЖрдЦрд┐рд░ рдореЗрдВ, рдкреЗрдЬ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, background.js
рдореЗрдВ рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
...
if (nextState === "ON") {
// Insert the CSS file when the user turns the extension on
await chrome.scripting.insertCSS({
files: ["focus-mode.css"],
target: { tabId: tab.id },
});
} else if (nextState === "OFF") {
// Remove the CSS file when the user turns the extension off
await chrome.scripting.removeCSS({
files: ["focus-mode.css"],
target: { tabId: tab.id },
});
}
}
});
ЁЯТб рдХреНрдпрд╛ рд╕реНрдЯрд╛рдЗрд▓ рд╢реАрдЯ рдХреЗ рдмрдЬрд╛рдп рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Scripting API рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рд╣рд╛рдВ. JavaScript рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, scripting.executeScript()
рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рдЬрд╝рд░реВрд░реА рдирд╣реАрдВ: рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛
рдлрд╝реЛрдХрд╕ рдореЛрдб рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЪрд╛рд▓реВ рдпрд╛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╢реЙрд░реНрдЯрдХрдЯ рдЬреЛрдбрд╝реЗрдВ. рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ
"commands"
рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ.
{
...
"commands": {
"_execute_action": {
"suggested_key": {
"default": "Ctrl+B",
"mac": "Command+B"
}
}
}
}
"_execute_action"
рдХреБрдВрдЬреА, action.onClicked()
рдЗрд╡реЗрдВрдЯ рдХреЗ рдЬреИрд╕реЗ рд╣реА рдХреЛрдб рдЪрд▓рд╛рддреА рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реЛрддреА.
рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╣реЛ:
рдЕрдкрдиреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕реНрдерд╛рдиреАрдп рддреМрд░ рдкрд░ рд▓реЛрдб рдХрд░рдирд╛
рдЕрдирдкреИрдХ рдХрд┐рдП рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рдбреЗрд╡рд▓рдкрд░ рдореЛрдб рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирдорд╕реНрддреЗ рджреБрдирд┐рдпрд╛ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ.
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд╛рд▓реЗ рдкреЗрдЬ рдкрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдкреЗрдЬ рдЦреЛрд▓реЗрдВ:
- Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
- Chrome Web Store рдкрд░ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдирд╛
- Scripting API
рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдРрдХреНрд╢рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЕрдЧрд░ рдЖрдкрдиреЗ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рд╕реЗрдЯ рдЕрдк рдХрд┐рдпрд╛ рд╣реИ, рддреЛ Ctrl + B
рдпрд╛ Cmd + B
рджрдмрд╛рдХрд░ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ.
рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЗрд╕ рдкрд░:

ЁЯОп рд╕рдВрднрд╛рд╡рд┐рдд рд╕реБрдзрд╛рд░
рдЖрдЬ рдЬреЛ рдХреБрдЫ рднреА рд╕реАрдЦрд╛ рд╣реИ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдХрд╛рдо рдХрд░реЗрдВ:
- рд╕реАрдПрд╕рдПрд╕ рд╕реНрдЯрд╛рдЗрд▓рд╢реАрдЯ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдВ.
- рдХреЛрдИ рджреВрд╕рд░рд╛ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ.
- рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдмреНрд▓реЙрдЧ рдпрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреА рд╕рд╛рдЗрдЯ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдмрджрд▓рдирд╛.
рдХрдореНрдпреВрдирд┐рдЯреА рдХреЛ рдмрдврд╝рд╛рддреЗ рд░рд╣реЗрдВ.
рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдзрд╛рдИ ЁЯОЙ. рдЗрд╕ рд╕реАрд░реАрдЬрд╝ рдХреЗ рдЕрдиреНрдп рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд░рдХреЗ, рдЕрдкрдиреА рд╕реНрдХрд┐рд▓ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдПрдВ:
Extension | рдЖрдкрдХреЛ рдХреНрдпрд╛ рд╕реАрдЦрдиреЗ рдХреЛ рдорд┐рд▓реЗрдЧрд╛ |
---|---|
рдХрд┐рддрд╛рдм рдкрдврд╝рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп | рдкреЗрдЬреЛрдВ рдХреЗ рдХрд┐рд╕реА рдЦрд╛рд╕ рд╕реЗрдЯ рдореЗрдВ, рдЕрдкрдиреЗ-рдЖрдк рдПрд▓рд┐рдореЗрдВрдЯ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП. |
Tabs Manager | рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреЙрдк-рдЕрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП. |
рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рддреЗ рд░рд╣реЗрдВ
рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдордЬрд╝рд╛ рдЖрдпрд╛ рд╣реЛрдЧрд╛. рд╕рд╛рде рд╣реА, рдЖрдкрдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбреЗрд╡рд▓рдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рднреА рдЦреБрд╢реА рд╣реЛрдЧреА. рд╣рдорд╛рд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдпреЗ рд▓рд░реНрдирд┐рдВрдЧ рдкрд╛рде рдЕрдкрдирд╛рдПрдВ:
- рдбреЗрд╡рд▓рдкрд░ рдЧрд╛рдЗрдб рдореЗрдВ, рдмреЗрд╣рддрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рджрд░реНрдЬрдиреЛрдВ рд▓рд┐рдВрдХ рдореМрдЬреВрдж рд╣реИрдВ.
- рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдкрд╛рд╕, рдУрдкрди рд╡реЗрдм рдкрд░ рдЙрдкрд▓рдмреНрдз рдПрдкреАрдЖрдИ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреЗрд╣рддрд░ рдПрдкреАрдЖрдИ рдХрд╛ рдРрдХреНрд╕реЗрд╕ рд╣реЛрддрд╛ рд╣реИ. Chrome рдХреЗ рдПрдкреАрдЖрдИ рд╕реЗ рдЬреБрдбрд╝рд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝, рд╣рд░ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ.