Страницы: 1
Reload Broken Images 0.3.1 (2015-04-02)
Автор: Infocatcher
Описание:
Кнопка обновляет поврежденные или незагруженные изображения.
Работает аналогично пункту «Перезагрузить изображение» в контекстном меню, но для всех изображений на странице.
Установить:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EReload%20Broken%20Images%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAV1BMVEUAAABVu1URdxERdxEzmTMfhR9Vu1UzmTMfhR+xsbEfhR/l5eVHrUeI7ohVu1X///8zmTMRdxGcz5xxpHHA2sBgk2B6rXpv1G+91r3L5ct7rnuMpYyCr4Lz4NPdAAAACXRSTlMAgIBAQEBAgIDCV2g6AAAAd0lEQVR4Xm2PyQ6DMAxEHeg23pJA1+X/v7MQYaqivos17zAj0x8QrCI3INiILNiIMCEmfoQMfl4EJMtTVU3fUStjMbOblV0YNmZ23i+RqFairvaU0pwFdLni4AlwbysCyXe11huzjzJ1mpXj+tyLnZlP9KWv3Xw+8OkH1RK7f5sAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B//%20http%3A//infocatcher.ucoz.net/js/cb/reloadBrokenImages.js%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fid%3D57978%0A//%20https%3A//github.com/Infocatcher/Custom_Buttons/tree/master/Reload_Broken_Images%0A%0A//%20Reload%20Broken%20Images%20button%20for%20Custom%20Buttons%0A//%20%28code%20for%20%22code%22%20section%29%0A%0A//%20%28c%29%20Infocatcher%202012-2015%0A//%20version%200.3.1%20-%202015-04-02%0A%0Avar%20debug%20%3D%20false%3B%0Avar%20maxAttempts%20%3D%204%3B%0A%0Afunction%20_localize%28s%29%20%7B%0A%09var%20strings%20%3D%20%7B%0A%09%09%22%25label%25%3A%20%22%3A%20%7B%0A%09%09%09ru%3A%20%22%25label%25%3A%20%22%0A%09%09%7D%2C%0A%09%09%22Reloading%3A%20%241/%242%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u0435%3A%20%241/%242%22%0A%09%09%7D%2C%0A%09%09%22Done%20%5Btotal%3A%20%241%2C%20failed%3A%20%242%5D%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0413%u043E%u0442%u043E%u0432%u043E%20%5B%u0432%u0441%u0435%u0433%u043E%3A%20%241%2C%20%u043D%u0435%u0443%u0434%u0430%u0447%u043D%u043E%3A%20%242%5D%22%0A%09%09%7D%2C%0A%09%09%22Done%20%5Btotal%3A%20%241%5D%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0413%u043E%u0442%u043E%u0432%u043E%20%5B%u0432%u0441%u0435%u0433%u043E%3A%20%241%5D%22%0A%09%09%7D%2C%0A%09%09%22Start%20reloading%3A%20%241%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u0417%u0430%u043F%u0443%u0441%u043A%20%u043E%u0431%u043D%u043E%u0432%u043B%u0435%u043D%u0438%u044F%3A%20%241%22%0A%09%09%7D%2C%0A%09%09%22Nothing%20to%20reload%22%3A%20%7B%0A%09%09%09ru%3A%20%22%u041E%u0431%u043D%u043E%u0432%u043B%u044F%u0442%u044C%20%u043D%u0435%u0447%u0435%u0433%u043E%22%0A%09%09%7D%0A%09%7D%3B%0A%09var%20locale%20%3D%20%28function%28%29%20%7B%0A%09%09//var%20prefs%20%3D%20Services.prefs%3B%0A%09%09var%20prefs%20%3D%20Components.classes%5B%22@mozilla.org/preferences-service%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIPrefBranch%29%3B%0A%09%09if%28%21prefs.getBoolPref%28%22intl.locale.matchOS%22%29%29%20%7B%0A%09%09%09var%20locale%20%3D%20prefs.getCharPref%28%22general.useragent.locale%22%29%3B%0A%09%09%09if%28locale.substr%280%2C%209%29%20%21%3D%20%22chrome%3A//%22%29%0A%09%09%09%09return%20locale%3B%0A%09%09%7D%0A%09%09return%20Components.classes%5B%22@mozilla.org/chrome/chrome-registry%3B1%22%5D%0A%09%09%09.getService%28Components.interfaces.nsIXULChromeRegistry%29%0A%09%09%09.getSelectedLocale%28%22global%22%29%3B%0A%09%7D%29%28%29.match%28/%5E%5Ba-z%5D*/%29%5B0%5D%3B%0A%09_localize%20%3D%20%21locale%20%7C%7C%20locale%20%3D%3D%20%22en%22%0A%09%09%3F%20function%28s%29%20%7B%0A%09%09%09return%20s%3B%0A%09%09%7D%0A%09%09%3A%20function%28s%29%20%7B%0A%09%09%09return%20strings%5Bs%5D%20%26%26%20strings%5Bs%5D%5Blocale%5D%20%7C%7C%20s%3B%0A%09%09%7D%3B%0A%09return%20_localize.apply%28this%2C%20arguments%29%3B%0A%7D%0A%0Avar%20logPrefix%20%3D%20%22reloadImage%28%29%3A%20%22%3B%0Adebug%20%26%26%20Components.utils.import%28%22resource%3A//gre/modules/Services.jsm%22%29%3B%0Avar%20activeAttempts%20%3D%200%3B%0Avar%20totalImages%20%3D%200%3B%0Avar%20successImages%20%3D%200%3B%0Avar%20failedImages%20%3D%200%3B%0Afunction%20reloadImage%28img%29%20%7B%0A%09//%20Based%20on%20code%20from%20chrome%3A//browser/content/nsContextMenu.js%20%28Firefox%2021.0a1%29%0A%09if%28%21%28img%20instanceof%20Components.interfaces.nsIImageLoadingContent%29%20%7C%7C%20%21img.currentURI%29%0A%09%09return%3B%0A%09var%20request%20%3D%20img.getRequest%28Components.interfaces.nsIImageLoadingContent.CURRENT_REQUEST%29%3B%0A%09if%28%0A%09%09request%0A%09%09%26%26%20request.imageStatus%20%26%20request.STATUS_LOAD_COMPLETE%0A%09%09%26%26%20%21%28request.imageStatus%20%26%20request.STATUS_ERROR%29%20//%20We%20may%20have%20both%20flags%21%0A%09%29%0A%09%09return%3B%0A%09var%20uri%20%3D%20img.currentURI%3B%0A%09var%20src%20%3D%20uri.spec%3B%0A%09try%20%7B%0A%09%09urlSecurityCheck%28%0A%09%09%09src%2C%0A%09%09%09img.ownerDocument.nodePrincipal%2C%0A%09%09%09Components.interfaces.nsIScriptSecurityManager.DISALLOW_SCRIPT%0A%09%09%29%3B%0A%09%7D%0A%09catch%28e%29%20%7B%0A%09%09Components.utils.reportError%28e%29%3B%0A%09%09return%3B%0A%09%7D%0A%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%29%3B%0A%09var%20errors%20%3D%200%3B%0A%09function%20check%28e%29%20%7B%0A%09%09var%20error%20%3D%20e.type%20%3D%3D%20%22error%22%3B%0A%09%09if%28error%20%26%26%20++errors%20%3C%20maxAttempts%29%20%7B%0A%09%09%09try%20%7B%0A%09%09%09%09var%20tools%20%3D%20Components.classes%5B%22@mozilla.org/image/tools%3B1%22%5D%0A%09%09%09%09%09.getService%28Components.interfaces.imgITools%29%3B%0A%09%09%09%09var%20cache%20%3D%20%22getImgCacheForDocument%22%20in%20tools%20//%20Gecko%2018%0A%09%09%09%09%09%3F%20tools.getImgCacheForDocument%28img.ownerDocument%29%0A%09%09%09%09%09%3A%20Components.classes%5B%22@mozilla.org/image/cache%3B1%22%5D%0A%09%09%09%09%09%09.getService%28Components.interfaces.imgICache%29%3B%0A%09%09%09%09if%28cache.findEntryProperties%28uri%29%29%20%7B%0A%09%09%09%09%09cache.removeEntry%28uri%29%3B%0A%09%09%09%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%20+%20%22%5Cn%3D%3E%20remove%20this%20URI%20from%20cache%22%29%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%09catch%28e%29%20%7B%0A%09%09%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%20+%20%22%5Cn%3D%3E%20cache.removeEntry%28%29%20failed%22%29%3B%0A%09%09%09%09Components.utils.reportError%28e%29%3B%0A%09%09%09%7D%0A%0A%09%09%09//%20Workaround%20for%20%22Image%20corrupt%20or%20truncated%22%20error%0A%09%09%09var%20req%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%09%09%09req.open%28%22GET%22%2C%20src%2C%20true%29%3B%0A%09%09%09req.channel.loadFlags%20%7C%3D%20Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE%3B%0A%09%09%09req.onload%20%3D%20req.onerror%20%3D%20resetSrc%3B%0A%09%09%09req.send%28null%29%3B%0A%0A%09%09%09resetSrc%28%29%3B%0A%09%09%7D%0A%09%09else%20%7B%0A%09%09%09if%28error%29%0A%09%09%09%09++failedImages%3B%0A%09%09%09else%0A%09%09%09%09++successImages%3B%0A%09%09%09feedback%28%22Reloading%3A%20%241/%242%22%2C%20%5BfailedImages%20+%20successImages%2C%20totalImages%5D%29%3B%0A%09%09%09destroy%28%29%3B%0A%09%09%7D%0A%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20src%20+%20%22%5Cn%3D%3E%20%22%20+%20e.type%20+%20%28error%20%3F%20%22%23%22%20+%20errors%20%3A%20%22%22%29%29%3B%0A%09%7D%0A%09function%20resetSrc%28%29%20%7B%0A%09%09img.src%20%3D%20%22about%3Ablank%22%3B%0A%09%09setTimeout%28function%28%29%20%7B%0A%09%09%09img.src%20%3D%20src%3B%0A%09%09%7D%2C%200%29%3B%0A%09%7D%0A%09function%20destroy%28%29%20%7B%0A%09%09clearTimeout%28stopWaitTimer%29%3B%0A%09%09img.removeEventListener%28%22load%22%2C%20check%2C%20true%29%3B%0A%09%09img.removeEventListener%28%22error%22%2C%20check%2C%20true%29%3B%0A%09%09if%28%21--activeAttempts%29%20%7B%0A%09%09%09feedback%28%0A%09%09%09%09failedImages%0A%09%09%09%09%09%3F%20%22Done%20%5Btotal%3A%20%241%2C%20failed%3A%20%242%5D%22%0A%09%09%09%09%09%3A%20%22Done%20%5Btotal%3A%20%241%5D%22%2C%0A%09%09%09%09%5BtotalImages%2C%20failedImages%5D%2C%0A%09%09%09%09true%0A%09%09%09%29%3B%0A%09%09%7D%0A%09%7D%0A%09img.addEventListener%28%22load%22%2C%20check%2C%20true%29%3B%0A%09img.addEventListener%28%22error%22%2C%20check%2C%20true%29%3B%0A%09var%20stopWaitTimer%20%3D%20setTimeout%28destroy%2C%208*60e3%29%3B%0A%09++activeAttempts%3B%0A%09++totalImages%3B%0A%09img.forceReload%28%29%3B%0A%7D%0Afunction%20feedback%28s%2C%20replacements%2C%20isLast%29%20%7B%0A%09if%28%22XULBrowserWindow%22%20in%20window%29%20%7B%0A%09%09s%20%3D%20_localize%28s%29%3B%0A%09%09if%28replacements%29%20replacements.forEach%28function%28replacement%2C%20i%29%20%7B%0A%09%09%09s%20%3D%20s.replace%28%22%24%22%20+%20++i%2C%20replacement%29%3B%0A%09%09%7D%29%3B%0A%09%09debug%20%26%26%20Services.console.logStringMessage%28logPrefix%20+%20%22feedback%28%29%3A%5Cn%22%20+%20s%29%3B%0A%09%09XULBrowserWindow.setOverLink%28feedbackPrefix%20+%20s%2C%20null%29%3B%0A%09%09if%28isLast%29%20setTimeout%28function%28%29%20%7B%0A%09%09%09XULBrowserWindow.setOverLink%28%22%22%2C%20null%29%3B%0A%09%09%7D%2C%201500%29%3B%0A%09%7D%0A%7D%0Afunction%20parseWin%28win%29%20%7B%0A%09Array.forEach%28win.frames%2C%20parseWin%29%3B%0A%09var%20doc%20%3D%20win.document%3B%0A%09if%28%22images%22%20in%20doc%29%20//%20HTML%20document%0A%09%09Array.forEach%28doc.images%2C%20reloadImage%29%3B%0A%09else%20%7B%0A%09%09Array.forEach%28%0A%09%09%09doc.getElementsByTagNameNS%28%22http%3A//www.w3.org/1999/xhtml%22%2C%20%22img%22%29%2C%0A%09%09%09reloadImage%0A%09%09%29%3B%0A%09%09Array.forEach%28%0A%09%09%09doc.getElementsByTagNameNS%28%22http%3A//www.mozilla.org/keymaster/gatekeeper/there.is.only.xul%22%2C%20%22image%22%29%2C%0A%09%09%09reloadImage%0A%09%09%29%3B%0A%09%7D%0A%7D%0Avar%20feedbackPrefix%20%3D%20_localize%28%22%25label%25%3A%20%22%29%0A%09.replace%28%0A%09%09%22%25label%25%22%2C%0A%09%09this%20instanceof%20XULElement%20%26%26%20this.label%0A%09%09%09%7C%7C%20%22Reload%20Broken%20Images%22%0A%09%29%3B%0AparseWin%28content%29%3B%0Afeedback%28totalImages%20%3F%20%22Start%20reloading%3A%20%241%22%20%3A%20%22Nothing%20to%20reload%22%2C%20%5BtotalImages%5D%2C%20%21totalImages%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Исходный код, секция «код»: reloadBrokenImages.js
Отредактировано Infocatcher (02-04-2015 10:20:55)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Тестовая версия, будьте осторожны!
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Reload Broken Images 0.3.0 (2014-06-20)
[+] Добавлена поддержка XML-документов.
[x] Workaround для ошибки "Image corrupt or truncated".
[x] Исправлена обработка корректной загрузки не с первой попытки.
[x] Исправлена обработка ограничений безопасности: теперь будет проигнорировано обновление только одного изображения.
[+] Добавлено отображение статистики в строке состояния.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Reload Broken Images 0.3.0.1 (2014-06-20)
[*] Добавлено автоматическое скрытие сообщения в строке состояния.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Чтобы перезагрузить изображения, нужно кликнуть на кнопку, или она сама эти изображения перезагружает.
Я просто нигде в коде не видел "click"
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Чтобы перезагрузить изображения, нужно кликнуть на кнопку, или она сама эти изображения перезагружает.
Я просто нигде в коде не видел "click"
// (code for "code" section)
Код выполняется только после клика по кнопке, никакой автоматики.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
difabor пишетЧтобы перезагрузить изображения, нужно кликнуть на кнопку, или она сама эти изображения перезагружает.
Я просто нигде в коде не видел "click"// (code for "code" section)
Код выполняется только после клика по кнопке, никакой автоматики.
А не могли бы Вы подсказать - где в коде отражается этот самый клик по кнопке?
Почему я это спрашиваю?
Допустим, я хочу реализовать то же не по нажатию на кнопку, а, например, нажатие левой клавиши мышки, затем клик ПКМ, но не на кнопке, а в любом месте браузера...
Как можно было бы сделать такое?
Если бы я видел что-то типа
this.onclick = function(e) { if (e.button == 0) { ... перезагрузка изображения ... } }
я бы как-то смог ... перезагрузка изображения ... попытаться вызвать как-то по-другому, а тут - непонятно
Отредактировано difabor (21-06-2014 02:26:01)
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
А не могли бы Вы подсказать - где в коде отражается этот самый клик по кнопке?
Нигде не отражается, запуском занимается Custom Buttons: код выполняется после события "command" кнопки.
Можно вот так сделать:
this.onclick = function(e) { if (e.button == 0) { reloadBrokenImages(); } }; var reloadBrokenImages = function() { // Здесь код из секции "код" }.bind(this);
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
И, как я понял, код из секции код убрать из секции код в этом случае.
Да, разумеется.
Хотя можно сделать вот так:
this.onclick = function(e) { if (e.button == 0) { e.preventDefault(); reloadBrokenImages(); } };
, так тоже секция «код» не выполнится (и можно будет использовать ее для сочетания клавиш).
но обычно проще вот такое в «код»:
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Reload Broken Images 0.3.1 (2015-04-02)
[x] Исправлено определение не полностью загруженных изображений в новых версиях Firefox.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Страницы: 1