рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХреА "рд╡реИрдзрддрд╛" рдФрд░ рдХреБрдЫ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ

рдирдорд╕реНрддреЗ!

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

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рддрдХ рд╡реИрдз рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ (рдпрджрд┐ рдХреЛрдИ рд╣реИ, рддреЛ - рдХреНрд╖рдорд╛ рдХрд░реЗрдВ) рд▓реЗрдЦ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

рдЙрд╕реА рд╕рдордп, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ: рдпрд╣рд╛рдВ рдкреГрд╖реНрда рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдЖрдкрдХреЛ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рдореИрдВ рдЖрдкрдХреА рдЕрдиреБрдорддрд┐ рд╕реЗ рдЙрдкрд░реЛрдХреНрдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рджреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рдКрдБрдЧрд╛ред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ "рд╡реИрдз" рдРрдб-рдСрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд▓рд┐рдВрдХ рдлреЗрдВрдХ рджреВрдВрдЧрд╛ред





рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдХрдард┐рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдЖрдкрдХреЗ рдПрдХреНрд╕рдпреВрдПрд▓ рдУрд╡рд░рд▓реЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ (рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕рд╛ рдХрд┐ "рд╣рд╛рдИрд▓реИрдВрдбрд░") рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдЬреЛ "рдЖрдкрдХреЗ рд╕рднреА рдХреЛрдб" рд╣реЛрдВрдЧреЗред

    рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдлрд╛рдЗрд▓ рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдХреНрд▓реЛрдЬрд░ рдХреЗ рдЕрдВрджрд░ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ:

    ( function (){
    var e;
    try {

    [ ]

    } catch (e){ window.alert(e); }
    })();

    * This source code was highlighted with Source Code Highlighter .


  2. рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб "рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛" рдкрд░ "рдмрд┐рдЦрд░рд╛ рд╣реБрдЖ" рд╣реЛ?

    рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ!

    var JS_Loader = function ( path_to_file, object_where_file_will_be_loaded ){

    Components.classes[ '@mozilla.org/moz/jssubscript-loader;1' ]
    .getService(Components.interfaces.mozIJSSubScriptLoader)
    .loadSubScript( path_to_file , object_where_file_will_be_loaded ); }
    }

    var our_scope_object = {};

    // USING:

    JS_Loader( 'some_path to chrome:// or resource://' , our_scope_object);

    /*

    , "" 'some_path' our_scope_object.
    , 'some_path' this our_scope_object

    */


    * This source code was highlighted with Source Code Highlighter .


    рдпрджрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЖрдкрдХреЛ рдЬреНрдЮрд╛рдд "рдЧреНрд▓рд┐рдЯреНрд╕" рдХреЗ рдХрд╛рд░рдг рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░, рд╡реИрд╕реЗ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЪреЗрддрд╛рд╡рдиреА рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреА, рддреЛ "рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

    Components.utils.import( path_to_file , object_where_file_will_be_loaded )

    * This source code was highlighted with Source Code Highlighter .


    рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рдЕрд▓рдЧ "рдкрд░реЗрд╢рд╛рдирд┐рдпрд╛рдБ" рд╣реЛрдВрдЧреАред

  3. рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рдЕрд▓рдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рд▓рд┐рдП рд╕рднреА "рд╣реИрдВрдЧрд┐рдВрдЧ" addEventListener рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ ... рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЖрдкрдХреЛ рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЧреИрд░-рдореМрдЬреВрдж рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

    рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛!

    window.addEventListener( "aftercustomization" , function (evt){

    [ , <br> , toolbar ]

    }, false );


    * This source code was highlighted with Source Code Highlighter .




рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ "рд╕реБрдЦрдж" рдЫреЛрдЯреА рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдЬреЛрдбрд╝рд╛ рд╣реИ:

"рдПрдХреНрд╕рдЯреЗрдВрд╢рди" рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВред

var ADDON_ID = '[ em:id install.rdf ]' ;
var EXTENSION = {};
if (Application.extensions){ EXTENSION = Application.extensions.get(ADDON_ID); }
else { Application.getExtensions( function (extensions){ EXTENSION = extensions.get(ADDON_ID); }); }
return {
ext : function (){ return EXTENSION; }
, ver : function (){ return EXTENSION.version; }
}


* This source code was highlighted with Source Code Highlighter .


рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рд░рд╛рд╕реНрддрд╛:

var addonLocation = '' ;
Components.utils.import( "resource://gre/modules/AddonManager.jsm" );
AddonManager.getAddonByID( '[ em:id install.rdf ]' , function (addon) {
addonLocation = addon.getResourceURI( "" ).QueryInterface(Components.interfaces.nsIFileURL).file;
} );


* This source code was highlighted with Source Code Highlighter .


рдмреНрд▓рд┐рдВрдХрд░ ...

var blinker = function (cnt){
for ( var i = 1; i < cnt; i++){
( function (ist){
// window.alert('' + ist + ' ' + (ist % 2));
window.setTimeout( function (){ show_status((ist % 2)); }, ist*450 );
})(i);
}
}

/*
  
show_status, , 1 0

"" , - ""
  
*/


* This source code was highlighted with Source Code Highlighter .


рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХреБрдЫ рд▓рд┐рдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:

рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ: addons.mozilla.org/en-US/developers
рдореЛрдЬрд╝рд┐рд▓рд╛ рдбреЗрд╡рд▓рдкрд░ рдиреЗрдЯрд╡рд░реНрдХ: developer.mozilla.org/en-US

рд╣рдо рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред
XUL рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛: developer.mozilla.org/en/XUL
developer.mozilla.org/en/JavaScript
developer.mozilla.org/en/DOM
developer.mozilla.org/en/XUL_Overlays
developer.mozilla.org/en/XUL_controls

рдФрд░ рдпрд╣ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛!
developer.mozilla.org/en/Setting_up_extension_development_environment
developer.mozilla.org/en/Extension_Frequently_Asked_Questions
developer.mozilla.org/en/Creating_toolbar_buttons
developer.mozilla.org/en/XUL_School/Adding_Toolbars_and_Toolbar_Buttons
developer.mozilla.org/en/XUL_School/Adding_Events_and_Commands
developer.mozilla.org/en/Addons/Add-on_Manager/Code_Samples
developer.mozilla.org/en/chrome_registration
developer.mozilla.org/en/XPCOM_Interface_Reference/mozIJSSubScriptLoader

рдФрд░ рдЗрд╕ рджрд┐рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рд╢рд╛рдпрдж, рдпрд╛рдж рд░рдЦрдирд╛ ...:
developer.mozilla.org/en/Code_snippets
developer.mozilla.org/en/XUL_School/Handling_Preferences
developer.mozilla.org/en/Security_best_practices_in_extensions

Source: https://habr.com/ru/post/In134413/


All Articles