Greasemonkey: рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд░реЛрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛<script>tags on the actual page.</script>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдирд╡ре░ 2017  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: greasemonkey/greasemonkey

Greasemonkey 4 рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рд╕рд╛рде, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдирд┐рдореНрди рдХреЛрдб <script> рдЯреИрдЧ рдореЗрдВ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреГрд╖реНрда рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛:

// ==UserScript==
// <strong i="7">@name</strong>        Variable access test
// <strong i="8">@namespace</strong>   example.com
// ==/UserScript==

$.ready(document, function() {
    console.log("Accessed jQuery successfully.")
});

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ $ is not defined ред рдпрд╣ рдореБрдЭреЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ <script> рдЯреИрдЧ рд▓реЛрдб рд╣реЛрдиреЗ рд╕реЗ document.readyState interactive !

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВрдиреЗ window.addEventListener('load', ...) рдмрд╛рдж jQuery рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рджреЗрдЦреЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

// ==UserScript==
// <strong i="19">@name</strong>        Variable access test
// <strong i="20">@namespace</strong>   example.com
// ==/UserScript==

window.addEventListener('load', function() {
    console.log("Before accessing jQuery")
    $;
    console.log("Accessed jQuery successfully!")
});

рдпрд╣ рди рддреЛ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рди рд╣реА рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИ - рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, $ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдпрд╣


рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдкреЗрдЬ рдкрд░ рдЖрдЬрд╝рдорд╛рдПрдВ рдЬреЛ jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред @require рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ - рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреГрд╖реНрда рдХреЗ рд╕рдорд╛рди jQuery рдХреЗ рдЙрджрд╛рд╣рд░рдг рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рд╕рдВрднрд╡рддрдГ jQuery рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рдЕрдм рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ (рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдореЗрдВ), рдФрд░ рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рдЕрдиреБрдорддрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд░рд╣рддреА рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд░реЗрд╢рд╛рдиреА рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдХрдареЛрд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЯреИрдореНрдкрд░рдореЛрдирдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреА рд╣реЛрдЧреА рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдмрд╛рд╣рд░ рди рд╣реЛ рдЬрд╛рдПред рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЙрдирдХреЗ рд╡рд░реНрддрдорд╛рди рдЕрд╡рддрд╛рд░ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред

рд╕рднреА 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ Greasemonkey рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИ, рдПрдХ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдзрд┐рдХред
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_scripts#Accessing_page_script_objects_from_content_scripts

рдпрд╛ рддреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ window.wrappedJSObject рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ рдпрд╛ unsafeWindow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ Greasemonkey рдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдкрдЯреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рд╣реИред

@Sxderp рдореБрдЭреЗ "рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ Greasemonkey рдореБрджреНрджрд╛ рдирд╣реАрдВ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ - Tampermonkey рдФрд░ Violentmonkey рджреЛрдиреЛрдВ рд╣реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рдЗрддрдирд╛ рд╣реА рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рд╕реА рднреА рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдореМрдЬреВрджрд╛ рдпреВрдЬрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдиреНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рдпреВрдЬрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрд░реЙрд╕-рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕рд╛рде рд╣реА... рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреНрд░реАрдЬ рдХреНрдпреЛрдВ рд╣реЛрдЧреА рдФрд░ рди рд╕рд┐рд░реНрдл рдПрдХ рдЕрд╕рдлрд▓ рд▓реБрдХрдЕрдк рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рдардВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИред рдЕрдкрдирд╛ рдХреЛрдб рдХреЙрдкреА рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЬрдорд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, 'рдлреНрд░реАрдЬ' рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЧрд▓рдд рд╕рдордЭрд╛ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм Greasemonkey рдЕрдм рдФрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рд▓рд╛рдЗрди рдкрд░ 'рдлреНрд░реАрдЬ' (рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ) рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд┐рдХреНрд▓реЗрд░реЗрд╢рди рдПрд░рд░ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдмрд╣реБрдд рдпрдХреАрди рд╣реИ рдХрд┐ рдЗрд╕реЗ 'рдШрд╛рддрдХ' рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐, рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред


Violentmonkey рдХреЛрдб рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ <script> рддрддреНрд╡ рдмрдирд╛рдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ tabs.executeScripts() API рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдкрдиреА рдХрдорд┐рдпрд╛рдВ рднреА рд╣реИрдВред

рддреЛ ... рдЬрдм рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдЙрд╕ рд▓рд╛рдЗрди рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЪреБрдкрдЪрд╛рдк рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ? рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ? рдХреНрдпрд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рдмрд╛рдд рд╣реИред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ? рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдЦрд┐рд░рдХрд╛рд░ - рдкреГрд╖реНрда рдХреА рдЕрдкрдиреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░рдирд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдд рд╣реИред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпрд╛ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ?

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рд╣реИред рд╣рдо рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХ рдореБрдлрд╝реНрдд рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрд╡рдпрдВрд╕реЗрд╡рдХреЛрдВ рдиреЗ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдЦрд╛рд▓реА рд╕рдордп рджреЗрдХрд░ рдмрдирд╛рдпрд╛ рд╣реИред

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореЛрдЬрд╝рд┐рд▓рд╛ рдкрд░ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИред #2549

@arantius рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдереЛрдбрд╝рд╛ рдЯрдХрд░рд╛рд╡ рд╕реЗ рдмрд╛рд╣рд░ рдЖ рдЧрдпрд╛ рд╣реВрдБ ... рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд░ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рд╕реЛрдЪрд╛-рд╕рдордЭрд╛ рдирд┐рд░реНрдгрдп рд╣реИред рдЬрдм рддрдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рд╣рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЗрдЦрдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореЗрд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ var $ = window.wrappedJSObject.$; рдФрд░ var $= unsafeWindow.$; рджреЛрдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдореБрдЭреЗ $(document).ready(...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдкрд░ рдПрдХ рдФрд░ рддреНрд░реБрдЯрд┐ рджреА: Error: Permission denied to access property Symbol.toStringTag ред

рддреНрд░реБрдЯрд┐: рд╕рдВрдкрддреНрддрд┐ Symbol.toStringTag . рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЧрдИ

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ window.wrappedJSObject.$ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдпреВрдЬрд░рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ, рдпрд╛ рддреЛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╛ new рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде, рдареАрдХ рд╕реЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рджрд╛рдпрд░рд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╢рд╛рдпрдж рдкреЗрдЬ рдХрд╛ рд╡рд┐рдВрдбреЛ рд╕реНрдХреЛрдк)ред

рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ cloneInto рдкрд░ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдирд╣реАрдВ, рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ window.wrappedJSObject.$ ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

// ==UserScript==
// <strong i="7">@name</strong>        Variable access test
// <strong i="8">@namespace</strong>   example.com
// ==/UserScript==

var $ = window.wrappedJSObject.$;

$(document).ready(function() {});

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЪреБрдкрдЪрд╛рдк рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

// ==UserScript==
// <strong i="12">@name</strong>        Variable access test
// <strong i="13">@namespace</strong>   example.com
// ==/UserScript==

var $ = window.wrappedJSObject.$;

$.ready(function() {});

рдореИрдВрдиреЗ cloneInto рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЙрджрд╛рд╣рд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд┐рдкрд┐ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ $ рдХреЗ рдкреГрд╖реНрда рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?

рдЖрд╣, рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдкрдХреЛ рдлрд╝рдВрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рдЖрдкрдХреЛ exportFunction рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

// ==UserScript==
// <strong i="7">@name</strong>         ExampleJQuery
// <strong i="8">@version</strong>      1
// <strong i="9">@include</strong>      *
// <strong i="10">@grant</strong>        none
// ==/UserScript==

var unsafeWindow = window.wrappedJSObject;
var $;

// For sanity just return if we don't have the object
if (typeof unsafeWindow.$ === 'undefined') {
  console.log('No jQuery object, returning');
  return;
} else {
  $ = unsafeWindow.$;
}

// Create the function we want to export
function onReady() {
  console.log("I'm ready!");
}
// Export it. Some details on this.
// Argument 1. The function to export
// Argument 2. The scope to export it to. In general this will be window,
//             or some object in the scope. While it is valid to use
//             "window", I prefer to use "unsafeWindow" if I'm exporting
//             into that scope. I find it less confusing.
// Return      This is a reference to exported function. In general you'll
//             assign this to some property of the scope you're exporting
//             into. However, it's not always neccessary. For example, if
//             you're going to use it as a callback (like for .ready())
//             then you don't need to assign it into the exported scope.
//             But if you want it globally (or scopally) accessable then
//             you need to assign it.
let exported_onReady = exportFunction(onReady, unsafeWindow);
// OR
// unsafeWindow.onReady = exportFunction(onReady, unsafeWindow);

$(document).ready(exported_onReady);
// OR
// $(document).ready(unsafeWindow.onReady);

рдореИрдВрдиреЗ рдЕрдм рдЙрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ (рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдореЗрдВ), рдФрд░ рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛ рд╣реВрдВ рдЙрд╕реЗ рдЕрдиреБрдорддрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд░рд╣рддреА рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд░реЗрд╢рд╛рдиреА рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдХрдареЛрд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЯреИрдореНрдкрд░рдореЛрдирдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдиреА рд╣реЛрдЧреА рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд░рд╛рд╕реНрддреЗ рд╕реЗ рдмрд╛рд╣рд░ рди рд╣реЛ рдЬрд╛рдПред рд╕рд╛рдордЧреНрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдЙрдирдХреЗ рд╡рд░реНрддрдорд╛рди рдЕрд╡рддрд╛рд░ рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред

@obskyr рд╕реЗ рд╕рд╣рдордд рд╣реИрдВ, рдмрд╕ рдореЗрд░реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЯреИрдореНрдкрд░рдореЛрдирдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░реЗрдВ

+1, Tampermonkey (https://addons.mozilla.org/en-US/firefox/addon/tampermonkey/) рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред

+1, Tampermonkey (https://addons.mozilla.org/en-US/firefox/addon/tampermonkey/) рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред

рдпрд╣ рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд╛рд▓реВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рдкреВрд░реНрдг рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рдЧрд▓рдд рдирд┐рд░реНрдгрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд╕рдлрд▓рддрд╛ рдЕрджреВрд░рджрд░реНрд╢реА рд╣реЛ рд╕рдХрддреА рд╣реИ... ;-)

рдореИрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЯреАрдПрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдореБрджреНрджреЗ рд╣реИрдВ, рдореИрдВ рдЗрдирдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдПрдлрдПрдл рдХреНрд╡рд╛рдВрдЯрдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рдорд╛рдзрд╛рди рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ...

рдЦреИрд░, рдореБрдЭреЗ рд╡реИрд╕реЗ рднреА рдЕрдкрдиреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ TM рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ Firefox рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддреЛ рдкрд╣рд▓реЗ рдореИрдВ рдЬреАрдПрдо рдФрд░ рдЯреАрдПрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣рд╛ рдерд╛, рдЕрдм рдпрд╣ рд╕рд┐рд░реНрдл рдЯреАрдПрдо рд╣реИред рдЕрдм рддрдХ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Powersource picture Powersource  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jesus2099 picture jesus2099  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

lainverse picture lainverse  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

eradrix picture eradrix  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

GuardianMajor picture GuardianMajor  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ