Greasemonkey: document.head рд╢реВрдиреНрдп рд╣реИ рдЬрдм @run-at document-start

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЬреВрди 2017  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: greasemonkey/greasemonkey

рдкрд░реНрдпрд╛рд╡рд░рдг

рдХреБрдВрдЬреА | рдореВрд▓реНрдп
-- | --
рд╕рд┐рд╕реНрдЯрдо рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо | рдПрдПрдордбреА 64, рд╡рд┐рдВрдбреЛрдЬ-10-10.0.14393
рдмреНрд░рд╛рдЙрдЬрд╝рд░ | рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдбреЗрд╡рд▓рдкрд░ рд╕рдВрд╕реНрдХрд░рдг (55.0 рдмреАрдЯрд╛ 1, 64 рдмрд┐рдЯ)
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯ | Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
рд╡рд┐рдиреНрдпрд╛рд╕ рдмрдирд╛рдПрдБ | https://hg.mozilla.org/releases/mozilla-beta/rev/6872377277a618b2b9e0d2b4c2b9e51765ac199e
рддреЗрд▓ рдмрдВрджрд░ | 3.11

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ:

// ==UserScript==
// <strong i="15">@name</strong>        HeadTest
// <strong i="16">@namespace</strong>   HeadTest
// <strong i="17">@include</strong>     *
// @run-at      document-start
// <strong i="18">@version</strong>     1
// <strong i="19">@grant</strong>       none
// ==/UserScript==
AddGlobalStyle('body{background-color:red;}');

function AddGlobalStyle(css) {
    var head, style;
    head = document.getElementsByTagName("head")[0];
    console.log("[Test]: Head: %o", head); //DEBUG
    console.log("[Test]: document.head: %o", document.head); //DEBUG
}

рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо:

[Test]: Head:  <head> 
[Test]: document.head:  <head>

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдо:

[Test]: Head:  undefined
[Test]: document.head:  null

рдпрд╣ рд╕рдорд╕реНрдпрд╛ GM_addStyle . рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ

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

@ the8472 рдпрджрд┐ рд╡рд░реНрддрдорд╛рди document-start рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рдФрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рд╢реИрд▓реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдХреБрдЫ рдЗрд╕ рддрд░рд╣

function addGlobalStyle(css){
  let headHunter = new MutationObserver(
    records => {
    ; check mutation records
    ; is added node's tag name 'head'?
    ; create a style node then throw it in
    ; then disconnect us
   }
  );
  headhunter.observer(document, {childlist : true});
}

document-end рд╕реЗ рдкрд╣рд▓реЗ рд╢реИрд▓реА рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд╣ рдЙрдмрд╛рдК рд╣реИред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ GM_addstyle рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╡рд┐рдХреА рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреЗрддрд╛рд╡рдиреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ ("GM_addstyle @run-at document-start рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд╕реНрд╡рдпрдВ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреЗрдВ ", рдЖрджрд┐)

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

рдЕрдВрддрд┐рдо рдЕрдЪреНрдЫрд╛: рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 55.0a1 (2017-03-17)
https://hg.mozilla.org/mozilla-central/rev/39607304b774591fa6e32c4b06158d869483c312 рд╕реЗ рдмрдирд╛рдПрдВ

рдкрд╣рд▓рд╛ рдЦрд░рд╛рдм: рдлрд╛рдпрд░рдлреЙрдХреНрд╕ 55.0a1 (2017-03-17)
https://hg.mozilla.org/mozilla-central/rev/23a4b7430dd7e83a2809bf3dc41471f154301eda рд╕реЗ рдмрдирд╛рдПрдВ

рдкреБрд╢рд▓реЙрдЧ:
https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=39607304b774591fa6e32c4b06158d869483c312&tochange=23a4b7430dd7e83a2809bf3dc41471f154301eda

рдмрдЧ 1333990 рд╕рдВрджрд┐рдЧреНрдз рд╣реИред

рдпрд╣ рднреА рджреЗрдЦреЗрдВ #1849

@janekptacijarabaci рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛:

setTimeout(()=>{
    AddGlobalStyle('body{background-color:red;}');
});

рдпрд╣ рдЕрд╕реНрдерд┐рд░ рдФрд░ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

... рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИред
https://developer.mozilla.org/en-US/docs/Observer_Notifications#Documents

https://bugzilla.mozilla.org/show_bug.cgi?id=1333990#c128

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

рдпрджрд┐ рдЖрдк рдмрд╛рдж рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдмрд╕ document-end рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рддрддреНрд╡ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

@the8472
рд╢рд╛рдпрдж рдЖрдк рдареАрдХ рдХрд╣ рд░рд╣реЗ рд╣реИрдВред
рдПрдордбреАрдПрди рдХреЗ рдЕрдиреБрд╕рд╛рд░:

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рддрддреНрд╡-рд╕рдореНрдорд┐рд▓рд┐рдд
рдХрд┐рд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╛ рдореВрд▓ рддрддреНрд╡ рдмрдирдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

document-start ( document-element-inserted рдкрд░ рдЖрдзрд╛рд░рд┐рдд) <html></html> рдмрдирдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп, <head> рд╢реВрдиреНрдп рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдкреГрд╖реНрда рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╢реИрд▓реА рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк GM_addstyle document-end рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреГрд╖реНрда рдмреНрд▓рд┐рдВрдХ рдХрд░ рд░рд╣рд╛ рд╣реИ) рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ

GM_addStyle рд╡реИрд╕реЗ рднреА рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ <style> рдЯреИрдЧ рдХреЛ <head> рдореЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрдк рд╕реНрд╡рдпрдВ рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рдВрддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ <head> рдЙрдкрдпреЛрдЧ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред

@ the8472 рдпрджрд┐ рд╡рд░реНрддрдорд╛рди document-start рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╣реА рдФрд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рд╢реИрд▓реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдХреБрдЫ рдЗрд╕ рддрд░рд╣

function addGlobalStyle(css){
  let headHunter = new MutationObserver(
    records => {
    ; check mutation records
    ; is added node's tag name 'head'?
    ; create a style node then throw it in
    ; then disconnect us
   }
  );
  headhunter.observer(document, {childlist : true});
}

document-end рд╕реЗ рдкрд╣рд▓реЗ рд╢реИрд▓реА рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд╣ рдЙрдмрд╛рдК рд╣реИред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ GM_addstyle рдореЗрд░реЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╡рд┐рдХреА рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреЗрддрд╛рд╡рдиреА рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ ("GM_addstyle @run-at document-start рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рд╕реНрд╡рдпрдВ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреЗрдВ ", рдЖрджрд┐)

рд╣рд╛рдВ, gm_addstyle рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд▓реЗрдХрд┐рди рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреА рд╣реИ, рдЙрд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рд╕реНрдЯрд╛рд░реНрдЯ рдкрд░ рднреА рдЙрд╕реА рд╣реБрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреВрджрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЙрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд╣реИред DOM рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рд┐рдП рдЙрд╕рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рд╣реЛрдЧреАред рдпрд╛рдиреА рдЖрдкрдХреЛ рд╡реИрд╕реЗ рднреА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рд╢реБрд░реВ рдореЗрдВ рдЪреАрдЬреЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рд╡рд┐рд╕реНрддреГрдд рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдпрд╣ WAI рд╣реИ, рдФрд░ 3.x рд╢рд╛рдЦрд╛ рд╡реИрд╕реЗ рднреА ~ рдореГрдд рд╣реИред (рдореИрдВ, рдПрдХ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдирдП рд╡реЗрдм рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрдзрд┐рдкрддрд┐ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВред) GM_addStyle рдЬреИрд╕реА рдЪреАрдЬреЗрдВ 4.x рдореЗрдВ рдХрднреА рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдиреЗ рд╕реЗ рддрдп рдХреА рдЬрд╛рдПрдВрдЧреАред

https://arantius.com/misc/greasemonkey/amazon-url-cleaner.user.js рдЬреИрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореМрдЬреВрдж рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ DOM рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ ASAP рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

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

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

arantius picture arantius  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

xravian picture xravian  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ