ΠΠΎΡΠ°Π΄ΠΈ Π½Π΅ΡΡΠ³Π»Π°ΡΠΈΠ΅ Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° Mozilla ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈΡΠ΅ Π΄Π° Π½Π΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Ρ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ Π½Π° Firefox, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π½Π΅ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½ΠΈ Π΄ΠΎΠ±Π°Π²ΠΊΠΈ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° API Π·Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ Π½Π° WebExtensions, Π±Π΅ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΠΈ Π½Π° Firefox Π²ΡΠ² Π²Π°ΡΠΈΠ°Π½Ρ βΠΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈβ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π±Π΅Π· ΡΠΈΡΡΠΎΠ² ΠΏΠΎΠ΄ΠΏΠΈΡ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π±Π΅ΡΠ΅ ΡΠ»Π΅ΡΠ½Π΅Π½ΠΎ ΠΎΡ ΡΠ°ΠΊΡΠ°, ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π²ΡΠ² Firefox Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π° Π² ECMAScript ΠΊΠΎΠ΄ ΠΈ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π²ΡΠ² Π²ΡΡΠΊΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Firefox, Π½ΠΎ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠΎΠ½ΡΡΠ°Π½ΡΠΈΡΠ΅ (βMOZ_DEV_EDITIONβ, βMOZ_REQUIRE_SIGNINGβ) ΡΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π² Π΅Π΄ΠΈΠ½ ΡΠ°ΠΉΠ» (βmodules/addons/AddonSettings.jsmβ), ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² zip Π°ΡΡ ΠΈΠ²Π° β/usr/lib/firefox/omni.jaβ.
ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π°ΡΠ° ΠΏΠΎΠΌΠΎΡΠ½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΡΠ°ΠΉΠ» Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° esprima-python, ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° AST ΠΈ Π³ΠΎ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° jscodegen.py. Π Π°Π±ΠΎΡΠ°ΡΠ° Ρ zip ΡΠΎΡΠΌΠ°Ρ ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΎΡ libzip.py - ΡΠ²ΡΡΠ·Π²Π°Π½ΠΈΡ ΠΊΡΠΌ libzip. ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΅ ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΄Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ ΡΡΡΠ½ΠΎ ΠΎΡ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°.
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠ° unpin.py, ΠΊΠΎΠΉΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΡΠ° β{β, β==β ΠΈ β~=β Π½Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ Π² ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ Π½Π° ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΊΠΎΠ»Π΅Π»ΠΎΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΆΠ°Π²Π°Π½Π΅ ΠΏΡΠΈ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΆΠ΅Π»Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ ΡΡΠ΅Π· pip, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru