{"id":215175,"date":"2014-03-09T22:28:03","date_gmt":"2014-03-09T18:28:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=215175"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=215175","title":{"rendered":"<span class=\"post_title\">Firefox: \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 Firefox \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <a href=\"https:\/\/addons.mozilla.org\/firefox\/addon\/download-panel-tweaker\/\">Download Panel Tweaker<\/a>, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0449\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.<br \/>  \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e \u0441\u0430\u043c\u043e\u043c \u0441\u043f\u043e\u0440\u043d\u043e\u043c, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0438, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 (\u0445\u043e\u0442\u044f \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u043d\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00bb) \u2013 \u0442\u0430\u043a \u0443\u0436 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e <strike>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/strike> \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e.<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a (\u044d\u0442\u043e \u00ab\u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439\u00bb \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 <a href=\"http:\/\/habrastorage.org\/files\/8af\/19d\/622\/8af19d622286459ebd499dfd2d6998ca.png\" title=\"\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 0.2.0\">\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a<\/a>, \u00ab\u043e\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430):<br \/>  <img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/fb3\/ada\/9ff\/fb3ada9ff95a344c1821c7b4fca4973a.png\" alt=\"\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 0.2.0\" width=\"723\" height=\"578\"\/><br \/>  \u0410 \u0432\u043e\u0442 <a href=\"http:\/\/habrastorage.org\/files\/98f\/29b\/eb1\/98f29beb1fa1412db39305cc6b9153ac.png\" title=\"\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 Firefox 27.0.1\">\u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e<\/a>.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a\u043e\u0434\u0430 (\u0430 \u0442\u043e \u043a\u0443\u0434\u0430 \u0436\u0435 \u0431\u0435\u0437 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439?).<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u0412\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u0438\u0441\u043b\u043e\u0432\u0438\u044f, \u0438\u043b\u0438 \u0434\u0430 \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u044c!<\/h1>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043f\u0430\u043d\u0435\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0433\u0440\u043e\u043c\u043d\u044b! \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440 \u2013 \u0441\u043f\u0430\u0441\u0438\u0431\u043e, \u043d\u043e \u044f \u0438 \u0442\u0430\u043a \u043c\u043e\u0433\u0443 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442. \u0410 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0432\u0438\u0434\u043d\u043e \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438, \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0443\u0435\u0442\u0441\u044f, \u0430 \u043f\u043e\u043b\u044c\u0437\u044b \u0447\u0442\u043e-\u0442\u043e \u043c\u0430\u043b\u043e.<br \/>  \u0412 \u043e\u0431\u0449\u0435\u043c-\u0442\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0438 \u043d\u0435 \u0431\u044b\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u0440\u0430\u0437\u043c\u0435\u0440\u044b <a href=\"https:\/\/github.com\/Infocatcher\/UserStyles\/tree\/master\/Compact_downloads\">\u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f<\/a> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"http:\/\/forum.mozilla-russia.org\/doku.php?id=firefox:tips:userchrome.css\">userChrome.css<\/a> \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/addons.mozilla.org\/addon\/stylish\/\">Stylish<\/a>.<br \/>  \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043e\u0434\u043d\u0438\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0438\u043b\u044f\u043c\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e <abbr title=\"\u0418\u043b\u0438 \u044f \u0431\u044b\u043b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0441\u0435\u0440\u0434\u0435\u043d \u0432 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u044f\u0445 :)\">(?)<\/abbr> \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u2013 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c \u0432\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0435, \u043d\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043b\u0430\u0441\u0441\u044b <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/::before\">::before<\/a> \u0438 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/::after\">::after<\/a> \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 XUL \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 (\u0432\u0438\u0434\u0438\u043c\u043e, \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/XBL\/XBL_1.0_Reference\/Anonymous_Content\">\u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432<\/a>), \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442:  <\/p>\n<pre><code class=\"css\">.downloadDetails[tooltiptext]::after { \tcontent: attr(tooltiptext) !important; } <\/code><\/pre>\n<h1>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a<\/h1>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u0434, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0430\u0448\u0435\u043b\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0432 \u0444\u0430\u0439\u043b\u0435 <em>chrome:\/\/browser\/content\/downloads\/downloads.js<\/em>:  <\/p>\n<pre><code class=\"javascript\">const DownloadsView = {   \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/   \/\/\/\/ Functions handling download items in the list    \/**    * Maximum number of items shown by the list at any given time.    *\/   kItemCountLimit: 3, <\/code><\/pre>\n<p>  \u041d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0431\u044b\u043b\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u044b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a.<br \/>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043f\u043e\u0438\u0441\u043a\u0438 \u043f\u0440\u0438\u0432\u0435\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b <em>resource:\/\/app\/modules\/DownloadsCommon.jsm<\/em> \u0438 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>DownloadsCommon.getSummary()<\/em>:  <\/p>\n<pre><code class=\"javascript\">  \/**    * Returns a reference to the DownloadsSummaryData singleton - creating one    * in the process if one hasn't been instantiated yet.    *    * @param aWindow    *        The browser window which owns the download button.    * @param aNumToExclude    *        The number of items on the top of the downloads list to exclude    *        from the summary.    *\/   getSummary: function DC_getSummary(aWindow, aNumToExclude)   {     if (PrivateBrowsingUtils.isWindowPrivate(aWindow)) {       if (this._privateSummary) {         return this._privateSummary;       }       return this._privateSummary = new DownloadsSummaryData(true, aNumToExclude);     } else {       if (this._summary) {         return this._summary;       }       return this._summary = new DownloadsSummaryData(false, aNumToExclude);     }   }, <\/code><\/pre>\n<p>  \u0418 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 <em>DownloadsSummaryData<\/em>:  <\/p>\n<pre><code class=\"javascript\">\/**  * DownloadsSummaryData is a view for DownloadsData that produces a summary  * of all downloads after a certain exclusion point aNumToExclude. For example,  * if there were 5 downloads in progress, and a DownloadsSummaryData was  * constructed with aNumToExclude equal to 3, then that DownloadsSummaryData  * would produce a summary of the last 2 downloads.  *  * @param aIsPrivate  *        True if the browser window which owns the download button is a private  *        window.  * @param aNumToExclude  *        The number of items to exclude from the summary, starting from the  *        top of the list.  *\/ function DownloadsSummaryData(aIsPrivate, aNumToExclude) {   this._numToExclude = aNumToExclude; <\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2013 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:  <\/p>\n<pre><code class=\"javascript\">var itemCountLimit = 5; \/\/ \u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0441 3 \u0434\u043e 5 if(DownloadsCommon._privateSummary) \tDownloadsCommon._privateSummary._numToExclude = itemCountLimit; if(DownloadsCommon._summary) \tDownloadsCommon._summary._numToExclude = itemCountLimit; <\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043b\u0438\u043c\u0438\u0442 \u0434\u043b\u044f \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0438 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 <em>DownloadsSummaryData<\/em>.<br \/>  \u0421\u0430\u043c\u0430\u044f \u0436\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u043e\u0432\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u0443\u0435\u0442\u0441\u044f.<br \/>  \u041d\u043e \u0442\u0443\u0442 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0430 \u0444\u043e\u0440\u0430: \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/addons.mozilla.org\/addon\/private-tab\/\">Private Tab<\/a> (\u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043a\u0441\u0442\u0430\u0442\u0438, \u0442\u043e\u0436\u0435 \u0431\u044b\u043b\u0430 <a href=\"http:\/\/habrahabr.ru\/post\/175469\/\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>) \u0432\u043e\u0437\u043d\u0438\u043a \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0441 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043d\u0430 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432\u043a\u043b\u0430\u0434\u043e\u043a (\u0438 \u0442\u0430\u043c \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c \u0431\u0435\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u0438).<br \/>  \u041d\u043e \u0431\u0435\u0437 \u043f\u043e\u0434\u0432\u043e\u0445\u043e\u0432, \u043a\u0430\u043a \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u043e\u0431\u043e\u0448\u043b\u043e\u0441\u044c: \u0432 Firefox 28 \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043f\u0430\u043d\u0435\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a, \u0441\u043e\u0432\u0441\u0435\u043c (\u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0430\u0440\u044b\u043c \u0438 \u043d\u043e\u0432\u043e\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a). \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 \u2013 \u0431\u043b\u0430\u0433\u043e, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439.<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e \u0443\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435 <a href=\"https:\/\/gist.github.com\/Infocatcher\/5387328\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/bootstrap.js#L344\">\u0432 \u043a\u043e\u0434\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/a>.<br \/>  \u041f\u0440\u0438\u0447\u0435\u043c \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c  <\/p>\n<pre><code class=\"javascript\">DownloadsView._viewItems = {}; DownloadsView._dataItems = []; <\/code><\/pre>\n<p>  , \u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u044b:  <\/p>\n<pre><code class=\"javascript\">DownloadsView._viewItems = new window.Object(); DownloadsView._dataItems = new window.Array(); <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c <em>window<\/em> \u2013 \u044d\u0442\u043e \u043e\u043a\u043d\u043e, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f <em>DownloadsView<\/em> (\u0442\u043e \u0435\u0441\u0442\u044c <em>DownloadsView === window.DownloadsView<\/em>).<\/p>\n<h1>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435<\/h1>\n<p>\u042d\u0442\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u0430\u043c\u044b\u043c \u0441\u043b\u043e\u0436\u043d\u044b\u043c, \u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u0432 Firefox 26, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437-\u0437\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/issues\/5\">\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c issue<\/a>, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u043e\u0431\u043e \u0432\u0441\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<h2>\u0421\u0442\u0430\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a<\/h2>\n<p>\u0412 Firefox 25 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0447\u0438\u0449\u0430\u043b\u0438\u0441\u044c (<em>resource:\/\/app\/components\/DownloadsStartup.js<\/em>):  <\/p>\n<pre><code class=\"javascript\">      case &quot;browser-lastwindow-close-granted&quot;:         \/\/ When using the panel interface, downloads that are already completed         \/\/ should be removed when the last full browser window is closed.  This         \/\/ event is invoked only if the application is not shutting down yet.         \/\/ If the Download Manager service is not initialized, we don't want to         \/\/ initialize it just to clean up completed downloads, because they can         \/\/ be present only in case there was a browser crash or restart.         if (this._downloadsServiceInitialized &&             !DownloadsCommon.useToolkitUI) {           Services.downloads.cleanUp();         }         break;       ...       case &quot;quit-application&quot;:         ...         \/\/ When using the panel interface, downloads that are already completed         \/\/ should be removed when quitting the application.         if (!DownloadsCommon.useToolkitUI && aData != &quot;restart&quot;) {           this._cleanupOnShutdown = true;         }         break;        case &quot;profile-change-teardown&quot;:         \/\/ If we need to clean up, we must do it synchronously after all the         \/\/ &quot;quit-application&quot; listeners are invoked, so that the Download         \/\/ Manager service has a chance to pause or cancel in-progress downloads         \/\/ before we remove completed downloads from the list.  Note that, since         \/\/ &quot;quit-application&quot; was invoked, we've already exited Private Browsing         \/\/ Mode, thus we are always working on the disk database.         if (this._cleanupOnShutdown) {           Services.downloads.cleanUp();         } <\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>Services.downloads.cleanUp()<\/em>.<br \/>  (\u041a\u0441\u0442\u0430\u0442\u0438, \u0442\u0430\u043c \u0436\u0435 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u044b \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u2013 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 <em>browser.download.useJSTransfer<\/em>.)<br \/>  \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c <em>Services.downloads<\/em> \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u044d\u0442\u043e  <\/p>\n<pre><code class=\"javascript\">Components.classes[&quot;@mozilla.org\/download-manager;1&quot;] \t.getService(Components.interfaces.nsIDownloadManager); <\/code><\/pre>\n<p>  (\u0441\u043c. <em>resource:\/\/gre\/modules\/Services.jsm<\/em>), \u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f:  <\/p>\n<pre><code class=\"javascript\">Object.defineProperty(Services.downloads, &quot;cleanUp&quot;, { \tvalue: function() {}, \tenumerable: true, \tconfigurable: true, \twritable: true }); \/\/ Exception: can't redefine non-configurable property 'cleanUp' <\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u043d\u043e, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:  <\/p>\n<pre><code class=\"javascript\">var downloads = Services.downloads; var downloadsWrapper = { \t__proto__: downloads, \tcleanUp: function() { ... } }; this.setProperty(Services, &quot;downloads&quot;, downloadsWrapper); <\/code><\/pre>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448 \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438-\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <em>cleanUp<\/em> \u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e <em>Services.downloads<\/em>.<br \/>  \u041d\u0443, \u0430 \u0438\u0437 \u043f\u043e\u0434\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <em>Services.downloads.cleanUp()<\/em> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u0430, \u0438 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 <em>DownloadsStartup.js<\/em>, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c. \u042d\u0442\u043e \u0445\u043e\u0442\u044c \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e, \u043d\u043e \u0437\u0430\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L125\">\u0443\u0441\u043b\u043e\u0436\u0438\u043d\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443<\/a> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443.<\/p>\n<h2>\u041d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u0432\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0445\u0430\u043a\u043e\u0432<\/h2>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432 Firefox 26 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043d\u0435\u043b\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a) \u0432 \u0444\u0430\u0439\u043b <em>downloads.json<\/em> \u0432 \u043f\u0440\u043e\u0444\u0438\u043b\u0435. \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0431\u044b\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438:<br \/>  <em>resource:\/\/gre\/modules\/DownloadStore.jsm<\/em>  <\/p>\n<pre><code class=\"javascript\">this.DownloadStore.prototype = {   ...   \/**    * This function is called with a Download object as its first argument, and    * should return true if the item should be saved.    *\/   onsaveitem: () =&gt; true,   ...   \/**    * Saves persistent downloads from the list to the file.    *    * If an error occurs, the previous file is not deleted.    *    * @return {Promise}    * @resolves When the operation finished successfully.    * @rejects JavaScript exception.    *\/   save: function DS_save()   {     return Task.spawn(function task_DS_save() {       let downloads = yield this.list.getAll();       ...       for (let download of downloads) {         try {           if (!this.onsaveitem(download)) {             continue;           } <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0432 <em>resource:\/\/gre\/modules\/DownloadIntegration.jsm<\/em> \u043c\u0435\u0442\u043e\u0434 <em>onsaveitem<\/em> \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f:  <\/p>\n<pre><code class=\"javascript\">this.DownloadIntegration = {   ...   initializePublicDownloadList: function(aList) {     return Task.spawn(function task_DI_initializePublicDownloadList() {       ...       this._store.onsaveitem = this.shouldPersistDownload.bind(this);   ...   \/**    * Determines if a Download object from the list of persistent downloads    * should be saved into a file, so that it can be restored across sessions.    *    * This function allows filtering out downloads that the host application is    * not interested in persisting across sessions, for example downloads that    * finished successfully.    *    * @param aDownload    *        The Download object to be inspected.  This is originally taken from    *        the global DownloadList object for downloads that were not started    *        from a private browsing window.  The item may have been removed    *        from the list since the save operation started, though in this case    *        the save operation will be repeated later.    *    * @return True to save the download, false otherwise.    *\/   shouldPersistDownload: function (aDownload)   {     \/\/ In the default implementation, we save all the downloads currently in     \/\/ progress, as well as stopped downloads for which we retained partially     \/\/ downloaded data.  Stopped downloads for which we don't need to track the     \/\/ presence of a &quot;.part&quot; file are only retained in the browser history.     \/\/ On b2g, we keep a few days of history. \/\/@line 319 &quot;c:\\builds\\moz2_slave\\m-cen-w32-ntly-000000000000000\\build\\toolkit\\components\\jsdownloads\\src\\DownloadIntegration.jsm&quot;     return aDownload.hasPartialData || !aDownload.stopped; \/\/@line 321 &quot;c:\\builds\\moz2_slave\\m-cen-w32-ntly-000000000000000\\build\\toolkit\\components\\jsdownloads\\src\\DownloadIntegration.jsm&quot;   }, <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f <em>DownloadStore.prototype.onsaveitem()<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <em>new DownloadStore()<\/em>.<br \/>  (\u0417\u0430\u0431\u0435\u0433\u0430\u044f \u0432\u043f\u0435\u0440\u0435\u0434, \u0434\u043e\u0431\u0430\u0432\u043b\u044e, \u0447\u0442\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u0432\u0441\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b \u0438 \u043f\u0440\u0430\u0432\u0434\u0438\u0432\u044b.)<br \/>  \u041f\u0440\u0438\u0447\u0435\u043c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 <a href=\"http:\/\/hg.mozilla.org\/mozilla-central\/file\/e3daaa4c73dd\/toolkit\/components\/jsdownloads\/src\/DownloadIntegration.jsm#l305\">DownloadIntegration.jsm<\/a> \u0435\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439:  <\/p>\n<pre><code class=\"javascript\">   shouldPersistDownload: function (aDownload)    {      \/\/ In the default implementation, we save all the downloads currently in      \/\/ progress, as well as stopped downloads for which we retained partially      \/\/ downloaded data.  Stopped downloads for which we don't need to track the      \/\/ presence of a &quot;.part&quot; file are only retained in the browser history.      \/\/ On b2g, we keep a few days of history.  #ifdef MOZ_B2G      let maxTime = Date.now() -        Services.prefs.getIntPref(&quot;dom.downloads.max_retention_days&quot;) * 24 * 60 * 60 * 1000;      return (aDownload.startTime &gt; maxTime) ||             aDownload.hasPartialData ||             !aDownload.stopped;  #else      return aDownload.hasPartialData || !aDownload.stopped;  #endif    }, <\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <em>DownloadIntegration.shouldPersistDownload()<\/em> (\u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e <em>DownloadIntegration._store.onsaveitem()<\/em> \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0443\u0436\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c) \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 \u043a\u043e\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f, \u0432\u0441\u043f\u043b\u044b\u0432\u0435\u0442 \u0446\u0435\u043b\u0430\u044f \u043a\u0443\u0447\u0430 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u044b\u0445 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u2013 \u0432\u0440\u043e\u0434\u0435, \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f.<\/p>\n<p>  <strong>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445<\/strong>, \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0443 \u0432\u0441\u0435\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0432\u0440\u0435\u043c\u044f \u0441\u0442\u0430\u0440\u0442\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (\u0445\u043e\u0442\u044f \u0432 <em>downloads.json<\/em> \u0432\u0441\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f).<br \/>  \u041d\u0435\u0432\u0435\u0440\u043d\u0430\u044f \u0434\u0430\u0442\u0430 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u043a\u043e\u0434\u043e\u043c \u0438\u0437 <em>resource:\/\/app\/modules\/DownloadsCommon.jsm<\/em>:  <\/p>\n<pre><code class=\"javascript\">\/**  * Represents a single item in the list of downloads.  *  * The endTime property is initialized to the current date and time.  *  * @param aDownload  *        The Download object with the current state.  *\/ function DownloadsDataItem(aDownload) {   this._download = aDownload;   ...   this.endTime = Date.now();    this.updateFromDownload(); } <\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <em>DownloadsDataItem.prototype.updateFromJSDownload()<\/em> (Firefox 26-27) \u0438 <em>DownloadsDataItem.prototype.updateFromDownload()<\/em> (Firefox 28+).<br \/>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L9\">\u0441\u0434\u0435\u043b\u0430\u0442\u044c<\/a> <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L45\">\u043e\u0431\u0435\u0440\u0442\u043a\u0443<\/a> \u0432\u043e\u043a\u0440\u0443\u0433 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L84\">\u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435<\/a>.<\/p>\n<p>  <strong>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445<\/strong>, \u043a\u043e\u0434 \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u043f\u0440\u043e MOZ_B2G \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430. \u041f\u0440\u0438\u0447\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043f\u0440\u043e MOZ_B2G \u043d\u0430\u0439\u0442\u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c (\u0432\u0438\u0434\u0438\u043c\u043e, \u0442\u0430\u043c \u0442\u043e\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442), \u043f\u0440\u0430\u0432\u0434\u0430, \u044f \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u2013 \u0442\u0430\u043c <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L32\">\u043b\u0435\u0433\u043a\u043e \u0432\u0441\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c<\/a>.<br \/>  \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u0441\u044e\u0434\u0430 \u0436\u0435 \u0438 <strong>\u0432-\u0442\u0440\u0435\u0442\u044c\u0438\u0445<\/strong>: \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u2013 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 (\u043e\u0448\u0438\u0431\u043a\u0430 \u00ab<em>too much recursion<\/em>\u00bb). \u041f\u0440\u0438\u0447\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0436\u0435 \u043d\u0430 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u0437 35 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a.<br \/>  \u0412\u0438\u0434\u0438\u043c\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u0439 (<a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Promise\">promises<\/a>) \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438.<br \/>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0435\u0441\u043b\u0438 \u0432 <em>DownloadStore.prototype.load()<\/em> (<em>resource:\/\/gre\/modules\/DownloadStore.jsm<\/em>) \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432  <\/p>\n<pre><code class=\"javascript\">  \/**    * Loads persistent downloads from the file to the list.    *    * @return {Promise}    * @resolves When the operation finished successfully.    * @rejects JavaScript exception.    *\/   load: function DS_load()   {     return Task.spawn(function task_DS_load() {       let bytes;       try {         bytes = yield OS.File.read(this.path);       } catch (ex if ex instanceof OS.File.Error && ex.becauseNoSuchFile) {         \/\/ If the file does not exist, there are no downloads to load.         return;       }        let storeData = JSON.parse(gTextDecoder.decode(bytes));        \/\/ Create live downloads based on the static snapshot.       for (let downloadData of storeData.list) {         try {           let download = yield Downloads.createDownload(downloadData); <\/code><\/pre>\n<p>  \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043d\u0430  <\/p>\n<pre><code class=\"javascript\">          let {Download} = Components.utils.import(&quot;resource:\/\/gre\/modules\/DownloadCore.jsm&quot;, {});           let download = Download.fromSerializable(downloadData); <\/code><\/pre>\n<p>  , \u0442\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043d\u0435\u0442\u0441\u044f, \u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0440\u0438 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a.<br \/>  <strong>\u0412-\u0447\u0435\u0442\u0432\u0435\u0440\u044b\u0445<\/strong>, \u0433\u0434\u0435-\u0442\u043e \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 <abbr title=\"\u0418\u043d\u0442\u0435\u0440\u0435\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u043c, \u043d\u043e \u0447\u0430\u0449\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0432\u0430\u0436\u043d\u0435\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\">(?)<\/abbr>, \u0442\u0430\u043a \u0447\u0442\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 <em>downloads.json<\/em> (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u0438 \u0436\u0435 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0431\u044b\u043b\u043e.<br \/>  \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0445\u0430\u043a: <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/bootstrap.js#L74\">\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c<\/a> \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<br \/>  <strong>\u0412-\u043f\u044f\u0442\u044b\u0445<\/strong>, \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u0435\u0441\u043b\u0438 \u0432 \u043f\u0430\u043d\u0435\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0447\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438) \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e \u043d\u0430\u0447\u0430\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<br \/>  \u041d\u043e \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u0435\u0440\u0442\u043a\u0430 \u0434\u043b\u044f <em>DownloadsDataItem.prototype.updateFromDownload()<\/em>, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L112\">\u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f<\/a>.<br \/>  \u041d\u0443, \u0430 \u043a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f <em>downloads.json<\/em>, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L279\">\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c<\/a>. \u041e\u0442 \u0447\u0435\u0433\u043e \u043c\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0431\u0435\u0449\u0430\u043d\u0438\u044f\u0445 (promises) \u043d\u0438\u0447\u0443\u0442\u044c \u043d\u0435 \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u043e\u0441\u044c \u2013 \u043b\u044e\u0431\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0441 \u0443\u043c\u043e\u043c \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0443\u0436\u043d\u0430 (\u0430 \u043d\u0435 \u043f\u0438\u0445\u0430\u0442\u044c \u043a\u0443\u0434\u0430 \u043d\u0438 \u043f\u043e\u043f\u0430\u0434\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0434\u043d\u043e \u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e).<br \/>  \u0410 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a: \u0435\u0441\u043b\u0438 \u0434\u0430\u0442\u044b \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0442\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 (\u043d\u043e\u0432\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043d\u0438\u0437\u0443, \u0430 \u043d\u0435 \u0441\u0432\u0435\u0440\u0445\u0443), \u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0442\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 (\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435).<br \/>  \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0442\u0435\u043d\u0438\u0435\u043c\u2026 \u0425\u043e\u0442\u044f \u0434\u0430\u0436\u0435 \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e. \u041f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0432\u0441\u0435\u0445 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0445. \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0435 <a href=\"https:\/\/github.com\/Infocatcher\/Download_Panel_Tweaker\/blob\/0.2.0\/downloadsEnhancements.js#L200\">\u043f\u0430\u0440\u043e\u0447\u043a\u0443 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439<\/a>.<br \/>  \u0422\u0443\u0442 \u043d\u0435\u043e\u0446\u0435\u043d\u0438\u043c\u0443\u044e \u043f\u043e\u043c\u043e\u0449\u044c \u043e\u043a\u0430\u0437\u0430\u043b <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Tools\/Profiler\">\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440<\/a> (Shift+F5), \u0431\u0435\u0437 \u043d\u0435\u0433\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u0445 \u043f\u043e\u0434\u0432\u0438\u0441\u0430\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e \u2013 \u0443\u0436 \u0431\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0442\u0430\u043c \u043b\u043e\u0433\u0438\u043a\u0430 (\u0430 <a href=\"https:\/\/gist.github.com\/Infocatcher\/9091608\">\u0441\u0442\u0435\u043a \u0432\u044b\u0437\u043e\u0432\u043e\u0432<\/a> \u0443\u0436\u0430\u0441\u0430\u0435\u0442).<br \/>  \u041d\u0443, \u0430 \u043f\u043e\u043c\u0438\u043c\u043e \u0447\u0442\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0435\u0449\u0435, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0441\u043f\u0438\u0441\u043a\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0442\u0430\u043c \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0432\u0430\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430, \u0435\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u042d\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e. \u041d\u043e, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u044d\u0442\u043e \u043d\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e: \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e, \u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u0430 \u043f\u043e\u0448\u0442\u0443\u0447\u043d\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 (\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0435\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a) \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<br \/>  \u0427\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u0441 \u043d\u0435\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043a\u0443\u0434\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u2013 \u0438\u0445 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0435 \u0432\u043f\u0430\u0434\u0435\u0442 \u0432 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0438\u0445 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e (\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0434\u043b\u044f 150&nbsp;\u0448\u0442\u0443\u043a). \u041f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443, \u044d\u0442\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/JavaScript_OS.File\">OS.File<\/a> API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (\u0430 \u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u0430), \u0438\u0437-\u0437\u0430 \u043d\u0435\u0433\u043e \u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043b\u0435\u0437\u0430\u0442\u044c \u043d\u0435\u0432\u043d\u044f\u0442\u043d\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0438\u0434\u0430  <\/p>\n<blockquote><p>Error: Win error 2 during operation open (\u041d\u0435 \u0443\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b.<br \/>  )<br \/>  Source file: resource:\/\/gre\/modules\/commonjs\/sdk\/core\/promise.js<br \/>  Line: 133  <\/p><\/blockquote>\n<p>(\u044d\u0442\u043e \u0435\u0441\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438)<br \/>  \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a, \u043f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a, \u0442\u043e \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u0434 \u0438, \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u043c\u043d\u043e\u0433\u043e, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0432\u0438\u0441\u043d\u0443\u0442\u044c.<\/p>\n<p>  <strong>P.S.<\/strong> <a href=\"https:\/\/addons.mozilla.org\/firefox\/addon\/download-panel-tweaker\/versions\/0.2.0\">\u041d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/a> \u0432\u0441\u0435 \u0435\u0449\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u00ab\u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438: 4 \u0438\u0437 17\u00bb. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f (\u0434\u0430 \u0438 \u0442\u0435\u043a\u0441\u0442\u0443, \u0432 \u043f\u043b\u0430\u043d\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0443\u0440\u044b \u2013 \u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0434\u0435\u043b\u0438 \u043d\u0430\u0437\u0430\u0434 \u2013 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u0443), \u043d\u043e \u0432\u0441\u0435\u043c\u0443 \u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0435\u043b.<br \/>  <strong>P.P.S.<\/strong> \u042f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0430\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044e \u0441\u0432\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 Firefox, \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u043c\u043d\u0435 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0430 \u0443\u0436 \u0432\u044b\u0432\u043e\u0434\u044b \u043f\u0443\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0430\u043c. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/215175\/\"> http:\/\/habrahabr.ru\/post\/215175\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0420\u0435\u0447\u044c \u043f\u043e\u0439\u0434\u0435\u0442 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 Firefox \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 <a href=\"https:\/\/addons.mozilla.org\/firefox\/addon\/download-panel-tweaker\/\">Download Panel Tweaker<\/a>, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0449\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.<br \/>  \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e \u0441\u0430\u043c\u043e\u043c \u0441\u043f\u043e\u0440\u043d\u043e\u043c, \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0438, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 (\u0445\u043e\u0442\u044f \u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0438\u0434\u043d\u044b \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u00ab\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438\u00bb) \u2013 \u0442\u0430\u043a \u0443\u0436 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0430 \u044d\u0442\u043e <strike>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/strike> \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0443\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e.<br \/>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a (\u044d\u0442\u043e \u00ab\u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439\u00bb \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0437 <a href=\"http:\/\/habrastorage.org\/files\/8af\/19d\/622\/8af19d622286459ebd499dfd2d6998ca.png\" title=\"\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 0.2.0\">\u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a<\/a>, \u00ab\u043e\u0447\u0435\u043d\u044c \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0435\u0449\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430):<br \/>  <img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/habrastorage.org\/getpro\/habr\/post_images\/fb3\/ada\/9ff\/fb3ada9ff95a344c1821c7b4fca4973a.png\" alt=\"\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 0.2.0\" width=\"723\" height=\"578\"\/><br \/>  \u0410 \u0432\u043e\u0442 <a href=\"http:\/\/habrastorage.org\/files\/98f\/29b\/eb1\/98f29beb1fa1412db39305cc6b9153ac.png\" title=\"\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0432 Firefox 27.0.1\">\u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e<\/a>.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a\u043e\u0434\u0430 (\u0430 \u0442\u043e \u043a\u0443\u0434\u0430 \u0436\u0435 \u0431\u0435\u0437 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439?).  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-215175","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/215175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=215175"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/215175\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=215175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=215175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=215175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}