Полезная информация

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№145129-06-2016 17:51:56

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

Dumby пишет

А у тебя так открывается окно просмотра сертификата текущей страницы?

Открывается только на нашем форуме, на других сайтах ничего не открывается.

Отсутствует

 

№145229-06-2016 19:39:10

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 45.0

Re: Обсуждение кнопок CB

bunda1 пишет

Открывается только на нашем форуме, на других сайтах ничего не открывается.

Спасибо. У меня на FF45 открывается и на других
mdn, wiki, searx, duck, translate, github, rarbg ...
А у тебя на каких не открывается?

Отсутствует

 

№145329-06-2016 21:43:23

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

Dumby пишет

А у тебя на каких не открывается?

На FF48:
http://www.delfi.lv/
http://www.softodrom.ru/
http://www.rambler.ru/

Добавлено 29-06-2016 21:45:46

Dumby пишет

И у меня на FF48 открывается.

Отредактировано bunda1 (29-06-2016 21:45:46)

Отсутствует

 

№145429-06-2016 23:10:37

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 45.0

Re: Обсуждение кнопок CB

bunda1 пишет

http://www.delfi.lv/
http://www.softodrom.ru/
http://www.rambler.ru/

Эээ, так это же не httpS ссылки :blush:.

Отсутствует

 

№145529-06-2016 23:19:42

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

Dumby пишет

Эээ, так это же не httpS ссылки :blush:.

Не httpS

Отсутствует

 

№145629-06-2016 23:39:42

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 45.0

Re: Обсуждение кнопок CB

bunda1 пишет

Не httpS

Вот и хорошо. Не до́лжно, значит и не должно́.

Отсутствует

 

№145730-06-2016 10:34:27

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 45.0

Re: Обсуждение кнопок CB

bunda1 ваш код Двойным правым кликом мыши сохранить изображение без запроса в указанную папку
не сохраняет изображения, если в заголовке страница есть японские/корейские символы: Heroes Шоу на SBS при этом расширение Image Picker работает нормально.
А можно сделать так, чтоб изображение сохранять по двойному клику средней кнопкой мыши?

Отсутствует

 

№145830-06-2016 19:42:08

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 207
UA: Firefox 47.0

Re: Обсуждение кнопок CB

bunda1
Автовыделение ++ на [firefox] 47 перестало работать (иконка потускнела).

Отсутствует

 

№145930-06-2016 22:15:16

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

Dobrov пишет

А можно сделать так, чтоб изображение сохранять по двойному клику средней кнопкой мыши?

Выделить код

Код:

// Двойным средным кликом мыши сохранить изображение в указанную папку без запроса, от 30.06.2016. ................
addEventListener("click", (e, targ = e.target)=> {
   if ( e.button !== 1 || targ.localName !== 'img' ) return;
   
   e.preventDefault();
   e.stopPropagation(); 
  
   var path = 'C:\\qwerty';
    
   if ( self.flag ) {
        var run = cbu.getPrefs("browser.download.folderList");
        var use = cbu.getPrefs("browser.download.useDownloadDir");
        try { var dir = Services.prefs.getComplexValue("browser.download.dir", Ci.nsISupportsString).data } 
        catch(e) { var dir = Services.downloads.defaultDownloadsDirectory.path };
                
        cbu.setPrefs("browser.download.folderList", 2);
        cbu.setPrefs("browser.download.useDownloadDir", true);
        cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", path));
        
        var imgLink = e.originalTarget.src;
        saveImageURL(imgLink, 0, 0, 0, 1, null, content.document);
      
        cbu.setPrefs("browser.download.folderList", run);
        cbu.setPrefs("browser.download.useDownloadDir", use);
        cbu.setPrefs("browser.download.dir", convertFromUnicode("UTF-8", dir));
        }
   self.flag = true;
   setTimeout(()=> self.flag = false, 600);

}, false, gBrowser);

Добавлено 30-06-2016 22:17:48

Dobrov пишет

bunda1 ваш код Двойным правым кликом мыши сохранить изображение без запроса в указанную папку
не сохраняет изображения, если в заголовке страница есть японские/корейские символы

Странно, но у меня там всё сохраняется. Может укажи какое то конкретное изображение которое не сохраняется.

Добавлено 30-06-2016 22:18:29

thrower пишет

bunda1
Автовыделение ++ на [firefox] 47 перестало работать (иконка потускнела).

Завтра или после завтра исправлю.

Отредактировано bunda1 (30-06-2016 22:18:29)

Отсутствует

 

№146001-07-2016 02:53:59

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 45.0

Re: Обсуждение кнопок CB

bunda1 пишет

Странно, но у меня там всё сохраняется. Может укажи какое то конкретное изображение которое не сохраняется.

Спасибо за код на middle-click!
но Картинка cover-DVD слева сверху не сохраняется, при открытии на весь экран 4 картинки превью тоже не сохраняются. (но в контекстном меню пунктов для изображения нет)

Отредактировано Dobrov (01-07-2016 02:55:47)

Отсутствует

 

№146101-07-2016 08:55:00

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

Dumby пишет

Эээ, так это же не httpS ссылки

А можно сделать, чтоб код пытался получить сертификат для текущего сайта? Как это в mozilla:exceptiondialog происходит? А то он не работает на about:certerror, когда чаще всего и нужно глянуть.

Добавлено 01-07-2016 08:56:25
thrower
Можете пока так поправить.

Отредактировано turbot (01-07-2016 08:56:25)

Отсутствует

 

№146201-07-2016 21:30:45

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 207
UA: Firefox 47.0

Re: Обсуждение кнопок CB

turbot
Это не то. Мне нужен autoselection (autohighlight, автовыделение), a не autocopy.

Отредактировано thrower (01-07-2016 21:34:35)

Отсутствует

 

№146301-07-2016 21:41:45

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 45.0

Re: Обсуждение кнопок CB

turbot пишет

Как это в mozilla:exceptiondialog происходит?

Вот и посмотри как это происходит.
Адрес: chrome://pippki/content/exceptionDialog.js
Поиск: function checkCert()

Отсутствует

 

№146401-07-2016 22:41:11

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

Dumby
У, спасибо. Получилось. Правда, пришлось половину содержимого в кнопку перетащить. :)

Отсутствует

 

№146502-07-2016 00:15:38

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

thrower пишет

bunda1
Автовыделение ++ на [firefox] 47 перестало работать (иконка потускнела).

Выделить код

Код:

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%3E%u0410%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%20++%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD+//4B////APX69AV9vWaPVJsR9GabDPiQrDGn6OzRG////wD+/v0B////AP///gL///0B////AP///wD///8A////AP3+/gP///8ActGnhRyqVP83q0r8PqMu/kqZDf9yoh7Wu8t8YNjan07m4bM9+ffqCf///wD///4B////AP///wD8/v8C//7/AOL5/A4d1NrUFc/G/yHEov0qt3b/NKtM/UGeHv9WlAD/eJcB/peZAP+nphzH5+bAIP///wD+/v8A/fz/A/3+/wH///8A5/b+CyG8/c4Jz/z/ENfm/RrLuf8nu4b/M61S/UGgJvtbnBH8fqAQ/IKXAP+lrjax/v76AP7+/gH///8A7fD9CNni/Bb///8Ac7/4dQCn9/8P1f38ENbh/xzIsf8ouoD/NKtL/0GeHf9enA79dJ0M/4yiGOrx8d0c/f3/AJaT7105O+TOHTjn5GuP8n7u9v4AOK/3ugW/+/8N2vX9FdDN/yDDoP8rtXD/N6c//kqdGPpcnBD/dqIZ3/L05BCVht5rLhXE/zMj0f0nKuL/EkHp7+Dm/Bq64/wyBKz4/w/W/fwP1+X/Gsq4/ya+kPwwsWH+M58o/jSSAP+exXNr////AFkwrepXMrT8SjPG9icg2v8xRunM8fX+BfL5/gcdpPbOBMH8/w/b9vwX0dH+FcKk/yS3evFZum2rpdOaUPj79gD///8BZy6R8lsqn/8/Hbb/NSfS6MPE+DDj7PwI8vP9ALHe/DQXs/nWAs/9/wDV5v9C1Mmwye/jI////wD///8B////AP7+/gG/oclQgVSpuIhuy4/OyfIheHbpgx815+4vZ+7C2uf8Fuz5/we+8P83y/f8Jvb9/QL///8A8vv4CZPUpGO837Y5////AP///wD6+f0D////AIVy1IsgEsz/Lini+Qow5/+Gq/Vq////AM/t/Ruo6/4+6/z9C////wB817lzE6dQ/zGeJfOs05lI/Pv9Bf///wDXy+knTCOu7UYvxf89KtH4Fhrh/4yb9GTB3/sjCJH07QC9+v854Pio9///AFHOsrMktnX/NKtO/0KoPsz9/P0D////AMey2ElWJaL/UzG4+k0vv/4sGs/5vLn1Mkl68aoLcvD/G6j4+QDH+v+29f8xY9zUkA/Eo/8swpH3JL6M/P38/gL///8A08DcNF8kkPlgNar9Sh2m/3texp/i4PsPKTDk7hxP7P8eefD7Apb1/47Z/E2x8vw2AMrv/wXN5/8O0Ova////AP///wH8+/wAoHe0iWkukfN+U66v8+31C9PL7iA3H8n6KSzi/yNF6/sMVe3/rc35PP///wB/zv1qM7L7u53e/j7///8A////AP///wD7+fsB6NzqD/n2+gT///8A7uf0EV80rONFKcD/LCTU/zxC47/u8P4D////Af7+/gH//f4A///+AP///wD///8A//7/AP79/gL///8A/v7/Av38/gT///8AsZHEZmAplv5gOrPQzMbwKf///wD9/f4C/f//A/7//wL9/v8CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u041D%u0430%u0441%u0442%u0440%u043E%u0439%u043A%u0430%20%u0444%u0443%u043D%u043A%u0446%u0438%u0439%20%u043A%u043B%u0438%u043A%u043E%u0432%20%u043C%u044B%u0448%u0438%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20..........%0Athis.onclick%20%3De%3D%3E%20%7B%0A%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041B%u041A%u041C%20....%0A%20%20%20if%20%28%20e.button%20%3D%3D%200%20%29%0A%20%20%20%20%20%20%20%20autoHighlight%28%20cbu.setPrefs%28s%2C%20%21cbu.getPrefs%28s%29%29%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u0421%u041A%u041C%20....%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%201%20%29%20toggleHighlightValue%28%27add%27%29%3B%0A%20%20%20%20%20%0A%20%20%20//%20%u0434%u0435%u0439%u0441%u0442%u0432%u0438%u0435%20%u043F%u0440%u0438%20%u043A%u043B%u0438%u043A%u0435%20%u041F%u041A%u041C%20....%20%20%20%20%0A%20%20%20if%20%28%20e.button%20%3D%3D%202%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.shiftKey%20%26%26%20%21e.altKey%20%26%26%20%21e.metaKey%20%29%20%7B%20%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%20%20%0A%20%20%20%20%20%20%20%20toggleHighlightValue%28%27clear%27%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u044A%u044F%u0432%u043B%u044F%u0435%u043C%20%u043F%u0435%u0440%u0435%u043C%u0435%u043D%u043D%u044B%u0435%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20..........%0Avar%20s%20%3D%20%22CB.autoHighlight%22%3B%0Avar%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0A%0A%0A//%20%u041F%u043E%u0434%u0441%u043A%u0430%u0437%u043A%u0430%20%u0434%u043B%u044F%20%u043A%u043D%u043E%u043F%u043A%u0438%20...........%0Athis.onmouseover%20%3D%28%29%3D%3E%20%7B%0A%20%20%20var%20array%20%3D%20getArray%28%29.map%28str%3D%3E%20%7B%20return%20str.slice%280%2C50%29%20+%20%28str.length%20%3E%2050%20%3F%20%22...%22%20%3A%20%22%22%29%20%7D%29%3B%0A%20%20%20this.tooltipText%20%3D%20%22%u0410%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%20++%20%5Cn%u041B%3A%20B%u043A%u043B%u044E%u0447%u0438%u0442%u044C/%u0432%u044B%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%5Cn%u0421%3A%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%5C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5Cn%u041F%3A%20%u0421%u0431%u0440%u043E%u0441%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%5Cn%5Cn%u0422%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%3A%20%5Cn%22%20+%20getArray%28%29.join%28%22%5Cn%22%29%3B%0A%7D%3B%0A%0A%0A//%20%u0423%u0441%u0442%u0430%u043D%u043E%u0432%u0438%u0442%u044C%20%u043D%u0443%u0436%u043D%u0443%u044E%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%20%u043F%u0440%u0438%20%u0441%u0442%u0430%u0440%u0442%u0435%20%u0431%u0440%u0430%u0443%u0437%u0435%u0440%u0430%20%u0438%u043B%u0438%20%u043F%u0440%u0438%20%u0438%u0437%u043C%u0435%u043D%u0435%u043D%u0438%u044F%u0445%20%u043D%u0430%u0441%u0442%u0440%u043E%u0435%u043A%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20..........%0Afunction%20toggleImage%28%29%20%7B%0A%20%20%20self.ownerDocument.getAnonymousElementByAttribute%28self%2C%20%22class%22%2C%20%22toolbarbutton-icon%22%29.%0A%20%20%20src%20%3D%20cbu.getPrefs%28s%29%0A%20%20%20%3F%20self.image%0A%20%20%20%3A%20%22data%3Aimage/x-icon%3Bbase64%2CAAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAD///8A/v7+AP39/QH9/f0B/f39Af39/QH///8AmJiYKQAAALEDAwPqAAAA1gAAAGm7u7sA////Afv7+wD///8A////AP39/QH9/f0D////AP///wD7+/sB////AKKiogoAAADJAAAA/wAAAP0BAQH+AAAA/wsLC3HDw8MA////Bfb29gP+/v4A////Aefn5wDT09MJ1tbWCdTU1AT///8AXFxcSwAAAPsEBAT/AAAA/gAAAPwFBQX/AAAA63Nzczvu7u4A/Pz8Avz8/AHr6+sJMjIyZgAAAL8CAgLCAAAApsbGxhhoaGhLAAAA/gUFBf8AAAD+AAAA/wAAAP0DAwP/AAAA6hMTE5eHh4cr3d3dACsrK4gAAAD/AwMD/gMDA/wAAAD/Hh4emy0tLQwAAADwAQEB/wAAAP4AAAD/AAAA/wAAAP8BAQH9AwMD/wAAAOcrKys5AwMD7gYGBv4AAAD7BAQE/QAAAP9KSkp5////ABUVFcIAAAD/AQEB/QAAAP8AAAD/AAAA/wAAAP4BAQH6BwcH/wICAr8BAQGfAAAA/wEBAf8AAADrBQUFeMbGxgX///8AGhoawQAAAP8BAQH+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9BgYG66+vrwc1NTVCDw8PPgAAADUREREt0tLSF+7u7gAdHR27AAAA/wICAvsBAQH9AQEB/QEBAf0BAQH8AQEB+wICAv8BAQHC////AsHBwQAICAhzAAAA6AQEBP8AAADqWlpaL25ubj8AAAD4AgIC/wAAAP4AAAD/AAAA/wAAAP4CAgL/AAAA3VtbWznHx8cABgYGbwAAAP8BAQH+AAAA+AUFBf8AAAB18PDwAIyMjDwYGBiuGRkZwxgYGJQTExNzFhYWdQUFBWRgYGAb////ALS0tBwAAADXBQUF/wAAAPgFBQX/AAAA90tLSzunp6cApqamDaurqwP///8A////AP///wD///8A////AP///wD7+/sBtLS0LQAAAOwLCwv/CQkJ+wAAAP88PDyLkJCQDAICAqYAAADdAAAAkJCQkAP///8AW1tbLUlJSXFnZ2cR////AP7+/gHNzc0HDAwMpAAAAP8AAADuJycneRMTEw8PDw/AAQEB/wsLC/8AAAD6cnJyPHR0dB4AAADiAAAA/yAgIJX///8A/v7+Av///wC7u7sPgoKCRYqKii3T09MACgoKaAAAAP8BAQH4AgIC/AAAAP8vLy9GKysreQAAAP8FBQX/BwcH3LS0tAj///8A/f39Af39/QH///8A////AOzs7AYDAwPEAAAA/wAAAPsCAgL/AAAA8mtrawlMTEygAAAA/wgICP8AAADpampqGP///wD///8A/Pz8Afn5+QT+/v4B7e3tBAQEBMEAAAD/AQEB/QAAAP8TExNv////AFJSUosAAAD/AwMD/wEBAauurq4A////Av///wD///8A/v7+AP///wLv7+8AAwMDSwAAAOADAwPZAAAAZZOTkwP///8AT09PIQAAALYAAAC3oaGhIf///wD9/f0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%3D%22%3B%0A%20%20%20%20%0A%20%20%20//%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0438%u0442%u044C%20%u0434%u0436%u0435%u0442%u043F%u0430%u043A%20%27FindBar%20Tweak%27%20....%20%0A%20%20%20AddonManager.getAddonsByTypes%28%5B%22extension%22%5D%2C%20addons%3D%3E%20%7B%0A%20%20%20%20%20%20addons.forEach%28addon%3D%3E%20%7B%20if%20%28addon.name%20%3D%3D%20%27FindBar%20Tweak%27%29%20addon.userDisabled%20%3D%20cbu.getPrefs%28s%29%20%7D%29%3B%0A%20%20%20%7D%29%3B%0A%7D%3B%0AtoggleImage%28%29%3B%0AgPrefService.addObserver%28s%2C%20toggleImage%2C%20false%29%3B%0AaddDestructor%28%28%29%3D%3E%20gPrefService.removeObserver%28s%2C%20toggleImage%29%29%3B%20%0A%0A%0A//%20%u0410%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0432%u044B%u0434%u0435%u043B%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20..........%0Afunction%20autoHighlight%28%29%20%7B%0A%20%20var%20finder%20%3D%20gBrowser.finder%20%7C%7C%20gFindBar%3B%0A%20%20var%20lighted%20%3D%20%28finder._highlightDoc%20%7C%7C%20finder._highlight%29.bind%28finder%29%3B%0A%20%20lighted%28false%29%3B%20%20%20%0A%0A%20%20if%20%28%20cbu.getPrefs%28s%29%20%29%20%7B%20%20%20%0A%20%20%20%20%20%20%20var%20array%20%3D%20getArray%28%29%3B%0A%20%20%20%20%20%20%20while%28array.length%20%3E%200%29%20lighted%28true%2C%20array.shift%28%29%29%3B%0A%20%20%20%20%20%20%20%7D%20%0A%7D%3B%0A%0A%0A//%20%u041E%u0431%u0440%u0430%u0431%u043E%u0442%u0447%u0438%u043A%20%u0441%u043B%u0435%u0434%u0438%u0442%20%u0437%u0430%20%u0437%u0430%u0433%u0440%u0443%u0437%u043A%u043E%u0439%20%u0438%20%u043F%u0435%u0440%u0435%u043A%u043B%u044E%u0447%u0435%u043D%u0438%u0435%u043C%20%u0432%u043A%u043B%u0430%u0434%u043A%u0438%20%u0438%20%u0437%u0430%u043F%u0443%u0441%u043A%u0430%u044E%u0442%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u0435%20..........%0Avar%20listener%20%3D%20%7B%20%0A%20%20%20onStateChange%3A%20function%28wpr%2C%20req%2C%20flag%29%20%7B%0A%20%20%20%20%20%20if%20%28%20gBrowser.currentURI.spec.startsWith%28%22http%22%29%20%26%26%20flag%20%26%20Ci.nsIWebProgressListener.STATE_STOP%20%29%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20autoHighlight%28%29%2C%200%29%3B%0A%20%20%20%7D%2C%0A%20%20%20%20%20%20%0A%20%20%20onLocationChange%3A%20function%28wpr%2C%20req%29%20%7B%0A%20%20%20%20%20%20if%20%28%20gBrowser.currentURI.spec.startsWith%28%22http%22%29%20%26%26%20%21req%20%26%26%20wpr.document.readyState%20%3D%3D%20%22complete%22%20%29%0A%20%20%20%20%20%20%20%20%20%20%20setTimeout%28%28%29%3D%3E%20autoHighlight%28%29%2C%200%29%3B%0A%20%20%20%7D%20%20%20%20%20%20%20%0A%7D%3B%0AgBrowser.addProgressListener%28listener%29%3B%0AaddDestructor%28%28%29%3D%3E%20gBrowser.removeProgressListener%28listener%29%20%29%3B%0A%0A%20%0A//%20%u0414%u043E%u0431%u0430%u0432%u0438%u0442%u044C%20%u0438%u043B%u0438%20%u0443%u0434%u0430%u043B%u0438%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20%u0432%20%27about%3Aconfig%20..........%0Afunction%20toggleHighlightValue%28arg%29%20%7B%20%0A%20%20if%20%28%20arg%20%3D%3D%20%27clear%27%29%0A%20%20%20%20%20%20%20var%20str%20%3D%20%27%27%2C%20notification%20%3D%20%22%u0422%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20%u0443%u0434%u0430%u043B%u0451%u043D%22%3B%0A%20%20%0A%20%20if%20%28%20arg%20%3D%3D%20%27add%27%20%29%20%7B%20%20%0A%20%20%20%20%20%20%20var%20sel%20%3D%20getSelect%28%29%3B%20%0A%20%20%20%20%20%20%20var%20array%20%3D%20%28getArray%28%29%20%3D%3D%20%22%22%29%20%3F%20%22%22%20%3A%20getArray%28%29.join%28%22%7C%22%29%20+%20%22%7C%22%3B%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20if%20%28%20sel%20%29%20%7B%20var%20str%20%3D%20array%20+%20sel%20%7D%0A%20%20%20%20%20%20%20else%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20val%20%3D%20custombuttons.promptBox%28self.label%2C%20%27B%u0432%u0435%u0434%u0438%u0442%u0435%20%u0442%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%3A%27%29%5B1%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28%20val%20%3D%3D%20%22%22%20%29%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20str%20%3D%20array%20+%20val%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20goDoCommand%28%22cmd_selectNone%22%29%3B%0A%20%20%20%20%20%20%20var%20notification%20%3D%20%22%u0414%u043E%u0431%u0430%u0432%u0438%u043B%20%u0442%u0435%u043A%u0441%u0442%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%3A%20%5Cn%22%20+%20%28sel%20%3F%20sel%20%3A%20val.replace%28/%5C%7C/g%2C%22%5Cn%22%29%29%3B%0A%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%0A%20%20cbu.setPrefs%28s%2C%20%28arg%20%3D%3D%20%27add%27%29%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20cbu.setPrefs%28%22CB.autoHighlight.value%22%2C%20convertFromUnicode%28%22UTF-8%22%2C%20str%29%29%3B%0A%20%20%0A%20%20alertsService.showAlertNotification%28self.image%2C%20self.label%2C%20notification%29%3B%0A%20%20autoHighlight%28%29%3B%20%20%20%20%20%20%0A%7D%3B%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0438%u0437%20%27about%3Aconfig%27%20%u043C%u0430%u0441%u0441%u0438%u0432%20%u0441%20%u0442%u0435%u043A%u0441%u0442%u0430%u043C%u0438%20%u0434%u043B%u044F%20%u0430%u0432%u0442%u043E%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u0438%u044F%20..........%0Afunction%20getArray%28%29%20%7B%20%0A%20%20%20try%20%7B%20return%20Services.prefs.getComplexValue%28%22CB.autoHighlight.value%22%2C%20Ci.nsISupportsString%29.data.split%28%22%7C%22%29%20%7D%20%0A%20%20%20catch%28e%29%20%7B%20return%20%5B%5D%20%7D%3B%0A%7D%3B%20%20%0A%0A%0A//%20%u041F%u043E%u043B%u0443%u0447%u0438%u0442%u044C%20%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20%u0438%u0437%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u044B%20%u0438%u043B%u0438%20false%20..........%0Afunction%20getSelect%28%29%20%7B%0A%20%20%20var%20el%20%3D%20document.commandDispatcher.focusedElement%3B%0A%20%20%20try%20%7B%20return%20el.value.substring%28el.selectionStart%2C%20el.selectionEnd%29%20%7D%20catch%28e%29%20%7B%7D%3B%0A%20%20%20var%20sel%20%3D%20document.commandDispatcher.focusedWindow.getSelection%28%29%3B%0A%20%20%20return%20%28sel%20%3D%3D%20%27%27%29%20%3F%20false%20%3A%20sel.toString%28%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%22%22%29%3B%0A%7D%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B%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

Отсутствует

 

№146602-07-2016 13:41:56

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

Вдруг, кому пригодится, "Проверить сертификат сайта":

Выделить код

Код:

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%3E%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%20%u0434%u043B%u044F%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/svg+xml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiB%20lbmNvZGluZz0id2luZG93cy0xMjUyIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNTQ4LjI5cHgiIGhlaWdodD0iNTQ4LjI5MXB4IiB2aWV3Qm94PSIwIDAgNTQ4LjI5IDU0OC4yOTEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU0OC4yOSA1NDguMjkxOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8Zz4NCgkJPGc+DQoJCQk8cGF0aCBkPSJNMzY4LjgyMyw0MTEuODc5Yy02LjQyNSwwLTEwLjA2OCwwLjUyNC0xMS45ODQsMC44NzJ2MzIuMjgzaDEwLjQyMWMxMy4xOTUsMCwyMS4wMDctNi41OTQsMjEuMDA3LTE2LjgzNCAgICAgQzM4OC4yNjcsNDE3LjQzOSwzODAuOTcsNDEyLjA1MywzNjguODIzLDQxMS44Nzl6Ii8+DQoJCQk8cGF0aCBkPSJNNDcyLjkyOSwxMzEuMzk5Yy0wLjAzMS0yLjUxOC0wLjgyOC01LTIuNTU2LTYuOTY0TDM2NC42NSwzLjY3N2MtMC4wMjEtMC4wMzEtMC4wNTItMC4wNDItMC4wODktMC4wNzMgICAgIGMtMC42MjUtMC43MDctMS4zNTUtMS4yODctMi4xMjctMS43OTVjLTAuMjMtMC4xNTItMC40NjItMC4yODYtMC43MDMtMC40MjFjLTAuNjgzLTAuMzY2LTEuMzg3LTAuNjY2LTIuMTI3LTAuODg3ICAgICBjLTAuMTk5LTAuMDYtMC4zNzEtMC4xMzktMC41NzEtMC4xOTRDMzU4LjIzLDAuMTE4LDM1Ny40LDAsMzU2LjU2NiwwSDk2Ljc1N0M4NC45MDQsMCw3NS4yNTUsOS42NTEsNzUuMjU1LDIxLjUwMlY1MjYuNzkgICAgIGMwLDExLjg1OCw5LjY0OSwyMS41MDEsMjEuNTAyLDIxLjUwMWgzNTQuNzc2YzExLjg2MiwwLDIxLjUwMi05LjY0MywyMS41MDItMjEuNTAxVjEzMi42MDMgICAgIEM0NzMuMDM1LDEzMi4xOTksNDcyLjk3MywxMzEuNzk1LDQ3Mi45MjksMTMxLjM5OXogTTE5NC41NzIsNDg5Ljk5MmM3Ljk4OSwwLDE2Ljg0Mi0xLjczNywyMi4wNS0zLjgyMmwzLjk5LDIwLjY2MSAgICAgYy00Ljg2MSwyLjQzMS0xNS43OTgsNS4wNC0zMC4wMjcsNS4wNGMtNDAuNDM5LDAtNjEuMjc5LTI1LjE3MS02MS4yNzktNTguNWMwLTM5LjkyNiwyOC40NzMtNjIuMTQ3LDYzLjg4Ni02Mi4xNDcgICAgIGMxMy43MTEsMCwyNC4xMjQsMi43ODcsMjguODA2LDUuMjA3bC01LjM3NSwyMS4wMDljLTUuMzg2LTIuMjYyLTEyLjg1NC00LjM0Mi0yMi4yMTUtNC4zNDIgICAgIGMtMjEuMDA5LDAtMzcuMzIxLDEyLjY2OC0zNy4zMjEsMzguNzFDMTU3LjA4LDQ3NS4yNDEsMTcwLjk1OCw0ODkuOTkyLDE5NC41NzIsNDg5Ljk5MnogTTMxMi41OTIsNTEwLjEzM2gtNzQuNjM5VjM5My4xNGg3Mi4yMTQgICAgIHYyMS43aC00NS42NnYyNC4yOTloNDMuMDU2djIxLjUxOWgtNDMuMDU2djI3Ljc3M2g0OC4wODVWNTEwLjEzM3ogTTM5MS45MSw1MTAuMTMzYy0xLjkxMS0zLjMwMy00LjY4My0xMi44NDctOC4xNTctMjcuMjU1ICAgICBjLTMuMTI5LTE0LjU3OC04LjE2Mi0xOC41NzgtMTguOTI0LTE4Ljc0NmgtNy45OXY0Ni4wMDZoLTI2LjIwNVYzOTQuNzA0YzguNTA0LTEuMzk2LDIxLjE3Mi0yLjQzNywzNS4yMzktMi40MzcgICAgIGMxNy4zNTUsMCwyOS40OTYsMi42MDQsMzcuODM4LDkuMTk4YzYuOTQ5LDUuNTYzLDEwLjc2MiwxMy43MTcsMTAuNzYyLDI0LjQ4MWMwLDE0LjkyLTEwLjU4OCwyNS4xNjctMjAuNjUxLDI4Ljh2MC41NCAgICAgYzguMTU3LDMuMjkzLDEyLjY2NiwxMS4xMDMsMTUuNjE3LDIxLjg2NGMzLjY0NywxMy4xODcsNy4yOCwyOC40NjIsOS41MzcsMzIuOTg3SDM5MS45MVY1MTAuMTMzeiBNOTYuNzU3LDM2NS4wODVWMjEuNTA3SDM0NS44MiAgICAgdjExMC4wMTVjMCw1LjkzNSw0LjgwOSwxMC43NSwxMC43NTEsMTAuNzVoOTQuOTYybDAuMDEsMjIyLjgxM0g5Ni43NTd6Ii8+DQoJCTwvZz4NCgkJPHBhdGggZD0iTTM1OS4wODUsMTUxLjA0NGMwLTYuNDA3LTMuMzU5LTExLjk5OC04LjM5My0xNS4yMDhjMi45NjUtNC44NTQsMy42MTctMTEuMDA4LDEuMTcxLTE2LjYxNWwtMy4wMDgtNi44OTcgICAgYy0xLjktNC4zNjUtNS4zNDUtNy41NTctOS40MDgtOS4zMTVjLTAuMTg5LTQuMzM4LTEuODkxLTguNjI3LTUuMjA3LTExLjk0NGwtNS4zMjMtNS4zMjFjLTQuMjcyLTQuMjczLTEwLjE2Mi01LjkxOC0xNS43MDYtNS4wMSAgICBjLTEuMTIyLTUuODktNS4xMDMtMTEuMTA2LTExLjA5Mi0xMy40NmwtNy4wMDktMi43NjRjLTQuOTQ0LTEuOTI5LTEwLjE4My0xLjQ4OC0xNC42MDMsMC42OTYgICAgYy0zLjEzNy0yLjY1MS03LjEyNi00LjMwNy0xMS41NTgtNC4zMDdoLTcuNTM1Yy01LjU2MiwwLTEwLjQ3NSwyLjU3NS0xMy43OTIsNi41MzNjLTQuOTY2LTMuNDEtMTEuNDk5LTQuMzAyLTE3LjQxNS0xLjcxMSAgICBsLTYuODk3LDIuOTk1Yy01LjIyMSwyLjI4NC04LjczNiw2Ljc0Ni0xMC4xMzQsMTEuODQzYy00LjI3MywwLjI0Mi04LjQ3LDEuOTMtMTEuNzI4LDUuMTg3bC01LjMyMiw1LjMyMSAgICBjLTMuNzA0LDMuNzAxLTUuNDA3LDguNjA2LTUuMjMxLDEzLjQ1NmMtNS41NTEsMS4zMTUtMTAuMzk0LDUuMjI0LTEyLjY0MSwxMC45NDhsLTIuNzYzLDdjLTIuMDkzLDUuMzQ0LTEuNCwxMS4wNDIsMS4yNjcsMTUuNjQ4ICAgIGMtMy4zNzEsMy4yNjgtNS40ODgsNy44NDgtNS40ODgsMTIuOTI3djcuNTJjMCw1LjMyMywyLjMzMywxMC4wNTMsNS45OTUsMTMuMzQ3Yy0yLjM5NCw0LjY2Mi0yLjgzNSwxMC4yODktMC41NjQsMTUuNDY1ICAgIGwzLjAwNSw2Ljg5N2MyLjE4MSw1LjAzMiw2LjQxMiw4LjQ3OCwxMS4yNzYsOS45NjdjLTAuNDQxLDUuMTIzLDEuMjIsMTAuMzg1LDUuMTQ1LDE0LjI5OWw1LjMyMiw1LjMyICAgIGM0LjAzMiw0LjA0Nyw5LjUxNSw1LjY5NCwxNC43OTMsNS4wOThjMS43NSw0LjU2OSw1LjI4OSw4LjQyOCwxMC4yMDIsMTAuMzYybDEuMDkyLDAuNDM3TDE3OC41LDMyMmwzNy4zMjEtMjAuNDYzICAgIGMwLDAsOS42MzgsNjAuNzk5LDkuNjM4LDU4Ljk5OWMwLTEuNDU0LDIyLjMwNy04MS42MTMsMzAuOTUzLTExMi41NjFjMS41ODUsMC40NzMsMy4yNjMsMC43NDYsNS4wMDgsMC43NDZoMy4xMzlsMzYuNzQ2LDk3Ljk3MiAgICB2LTUxLjE3bDM1LjUxNywyNC4wNzhsLTMyLjE2My04MS40NTJsMC42LTAuMjU3YzQuMTczLTEuODMsNy4yNTQtNS4wNzYsOS4wNjUtOC44OThjNS4yMDcsMC41MzksMTAuNjE0LTEuMTEzLDE0LjYwNC01LjExOSAgICBsNS4zMjMtNS4zMmM0LjU4OC00LjU4NSw2LjE0Mi0xMS4wMTMsNC43NTUtMTYuOWM0Ljk4OC0xLjYwNiw5LjI1LTUuMjYyLDExLjMwOC0xMC41MDlsMi43NjItNy4wMDQgICAgYzEuNjE2LTQuMTMzLDEuNTMzLTguNDcxLDAuMjIxLTEyLjM2OWMzLjUzOC0zLjI5OSw1Ljc5NS03Ljk3MSw1Ljc5NS0xMy4yMDN2LTcuNTI1SDM1OS4wODV6IE0yNjUuMTg5LDIxOS4wNzEgICAgYy0zNS41LDAtNjQuMjYzLTI4Ljc3NC02NC4yNjMtNjQuMjU3YzAtMzUuNDk1LDI4Ljc2OS02NC4yNTgsNjQuMjYzLTY0LjI1OGMzNS40ODUsMCw2NC4yNTIsMjguNzY5LDY0LjI1Miw2NC4yNTggICAgQzMyOS40NDEsMTkwLjI5NywzMDAuNjc1LDIxOS4wNzEsMjY1LjE4OSwyMTkuMDcxeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u0412%u044B%u043F%u043E%u043B%u043D%u044F%u0442%u044C%20%u043F%u043E%20%u041F%u041A%u041C%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20HTTPS%20Everywhere%0Avar%20HEBtn%20%3D%20document.getElementById%28%27https-everywhere-button%27%29%3B%0Aif%20%28%21HEBtn%29%20return%3B%0AHEBtn.oncontextmenu%20%3De%3D%3E%20this.click%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bconst%20soundService%20%3D%20Cc%5B%22@mozilla.org/sound%3B1%22%5D.createInstance%28Ci.nsISound%29%3B%0Aconst%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0Aconst%20directoryService%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29%3B%0Aconst%20foStream%20%3D%20Cc%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.createInstance%28Ci.nsIFileOutputStream%29%3B%0Aconst%20fus%20%3D%20Cc%5B%22@mozilla.org/docshell/urifixup%3B1%22%5D.getService%28Ci.nsIURIFixup%29%3B%0Aconst%20sertViewer%20%3D%20Cc%5B%22@mozilla.org/nsCertificateDialogs%3B1%22%5D.getService%28Ci.nsICertificateDialogs%29%3B%0A%0Avar%20img%20%3D%20self.image%2C%20lbl%20%3D%20self.label%2C%20hlp%20%3D%20self.Help%3B%0A%0Alet%20loc%20%3D%20window.gBrowser.selectedBrowser.contentWindow.location%3B%0A%0A//%20%u041E%u043F%u0446%u0438%u0438%3A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%2C%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20HTTPSEverywhereUserRules%2C%20xml-%u0444%u0430%u0439%u043B%20%u0441%20%u043F%u0440%u0430%u0432%u0438%u043B%u043E%u043C%20%u0434%u043B%u044F%20%u0430%u0434%u0434%u043E%u043D%u0430%20HTTPS%20Everywhere%0A//%20%u0428%u0430%u0431%u043B%u043E%u043D%20%u043F%u0440%u0430%u0432%u0438%u043B%20%u043D%u0430%u0445%u043E%u0434%u0438%u0442%u0441%u044F%20%u0432%u043E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%22%u041F%u043E%u043C%u043E%u0449%u044C%22%0Avar%20HTTPSEverywhereRules%20%3D%20true%2C%0A//%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0434%u043B%u044F%20%u0440%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u044F%20%28%u0432%20%u0430%u0441%u0441%u043E%u0446%u0438%u0438%u0440%u043E%u0432%u0430%u043D%u043D%u043E%u0439%20%u0441%20xml-%u0444%u0430%u0439%u043B%u0430%u043C%u0438%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%29%20%u0441%u043E%u0437%u0434%u0430%u043D%u043D%u043E%u0435%20%u043F%u0440%u0430%u0432%u0438%u043B%u043E%0A%20%20%20%20HTTPSEverywhereRulesEdit%20%3D%20true%2C%0A//%20%u041F%u0435%u0440%u0435%u043D%u0430%u043F%u0440%u0430%u0432%u0438%u0442%u044C%20%u043D%u0430%20https%20%u0432%u0435%u0440%u0441%u0438%u044E%20%u0441%u0430%u0439%u0442%u0430%2C%20%u043F%u0440%u0438%20%u043D%u0430%u043B%u0438%u0447%u0438%u0438%20%u0443%20%u043D%u0435%u0433%u043E%20%u0432%u0430%u043B%u0438%u0434%u043D%u043E%u0433%u043E%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A%20%20%20%20redirect%20%3D%20true%2C%0A//%20%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0434%u0438%u0430%u043B%u043E%u0433%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A%20%20%20%20showSert%20%3D%20false%2C%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0443%u0432%u0435%u0434%u043E%u043C%u043B%u0435%u043D%u0438%u0435%20%u0441%u043E%20%u0441%u0442%u0430%u0442%u0443%u0441%u043E%u043C%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A//%20%u041A%u043B%u0438%u043A%20%u043F%u043E%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u0448%u043A%u0435%20-%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0434%u0438%u0430%u043B%u043E%u0433%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%20%28%u043F%u0440%u0438%20%u043D%u0430%u043B%u0438%u0447%u0438%u0438%20%u043E%u043D%u043E%u0433%u043E%20%u0443%20%u0441%u0430%u0439%u0442%u0430%29%0A%20%20%20%20alert%20%3D%20true%2C%0A//%20%u0417%u0432%u0443%u043A%u043E%u0432%u043E%u0435%20%u0443%u0432%u0435%u0434%u043E%u043C%u043B%u0435%u043D%u0438%u0435%20%u043F%u0440%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0438%20%u0434%u0438%u0430%u043B%u043E%u0433%u0430%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A%20%20%20%20alertSound%20%3D%20true%3B%0A%0A%0A//%20chrome%3A//pippki/content/exceptionDialog.js%0Afunction%20badCertListener%28%29%20%7B%7D%0AbadCertListener.prototype%20%3D%20%7B%0A%20%20getInterface%3A%20function%20%28aIID%29%20%7B%0A%20%20%20%20return%20this.QueryInterface%28aIID%29%3B%0A%20%20%7D%2C%0A%20%20QueryInterface%3A%20function%28aIID%29%20%7B%0A%20%20%20%20if%20%28aIID.equals%28Ci.nsIBadCertListener2%29%20%7C%7C%0A%20%20%20%20%20%20%20%20aIID.equals%28Ci.nsIInterfaceRequestor%29%20%7C%7C%0A%20%20%20%20%20%20%20%20aIID.equals%28Ci.nsISupports%29%29%20%7B%0A%20%20%20%20%20%20return%20this%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20throw%20new%20Error%28Components.results.NS_ERROR_NO_INTERFACE%29%3B%0A%20%20%7D%2C%0A%20%20handle_test_result%3A%20function%20%28%29%20%7B%0A%20%20%20%20if%20%28gSSLStatus%29%20%7B%0A%20%20%20%20%20%20gCert%20%3D%20gSSLStatus.QueryInterface%28Ci.nsISSLStatus%29.serverCert%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%20%20notifyCertProblem%3A%20function%20MSR_notifyCertProblem%28socketInfo%2C%20sslStatus%2C%20targetHost%29%20%7B%0A%20%20%20%20gBroken%20%3D%20true%3B%0A%20%20%20%20gSSLStatus%20%3D%20sslStatus%3B%0A%20%20%20%20this.handle_test_result%28%29%3B%0A%20%20%20%20return%20true%3B%20//%20suppress%20error%20UI%0A%20%20%7D%0A%7D%0A%0A//%20chrome%3A//pippki/content/exceptionDialog.js%0Afunction%20getURI%28%29%20%7B%0A%20%20let%20uri%20%3D%20fus.createFixupURI%28loc.href%2C%200%29%3B%0A%0A%20%20if%20%28%21uri%29%20%7B%0A%20%20%20%20return%20null%3B%0A%20%20%7D%0A%0A%20%20if%20%28uri.scheme%20%3D%3D%20%22http%22%29%20%7B%0A%20%20%20%20uri.scheme%20%3D%20%22https%22%3B%0A%20%20%7D%0A%0A%20%20if%20%28uri.port%20%3D%3D%20-1%29%20%7B%0A%20%20%20%20uri.port%20%3D%20443%3B%0A%20%20%7D%0A%0A%20%20return%20uri%3B%0A%7D%0A%0A//%20chrome%3A//pippki/content/exceptionDialog.js%0Afunction%20getCert%28%29%20%7B%0A%20%20gCert%20%3D%20null%3B%0A%20%20gSSLStatus%20%3D%20null%3B%0A%20%20gChecking%20%3D%20true%3B%0A%20%20gBroken%20%3D%20false%3B%0A%0A%20%20var%20uri%20%3D%20getURI%28%29%3B%0A%20%20var%20req%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%0A%20%20try%20%7B%0A%20%20%20%20if%20%28uri%29%20%7B%0A%20%20%20%20%20%20req.open%28%27GET%27%2C%20uri.prePath%2C%20false%29%3B%0A%20%20%20%20%20%20req.channel.notificationCallbacks%20%3D%20new%20badCertListener%28%29%3B%0A%20%20%20%20%20%20req.send%28null%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%20catch%20%28e%29%20%7B%0A%20%20%20%20Cu.reportError%28%22Attempted%20to%20connect%20to%20a%20site%20with%20a%20bad%20certificate%20in%20the%20add%20exception%20dialog.%20%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22This%20results%20in%20a%20%28mostly%20harmless%29%20exception%20being%20thrown.%20%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Logged%20for%20information%20purposes%20only%3A%20%22%20+%20e%29%3B%0A%20%20%7D%20finally%20%7B%0A%20%20%20%20gChecking%20%3D%20false%3B%0A%20%20%7D%0A%0A%20%20if%20%28req.channel%20%26%26%20req.channel.securityInfo%29%20%7B%0A%20%20%20%20gSSLStatus%20%3D%20req.channel.securityInfo%0A%20%20%20%20%20%20.QueryInterface%28Ci.nsISSLStatusProvider%29.SSLStatus%3B%0A%20%20%20%20gCert%20%3D%20gSSLStatus.QueryInterface%28Ci.nsISSLStatus%29.serverCert%3B%0A%20%20%7D%0A%7D%0A%0Afunction%20createRule%28%29%20%7B%0A%20%20//%20http%3A//stackoverflow.com/questions/6449340/how-to-get-top-level-domain-base-domain-from-the-url-in-javascript%0A%20%20let%20domain%20%3D%20loc.host.match%28/%5B-%5Cw%5D+%5C.%28%3F%3A%5B-%5Cw%5D+%5C.xn--%5B-%5Cw%5D+%7C%5B-%5Cw%5D%7B3%2C%7D%7C%5B-%5Cw%5D+%5C.%5B-%5Cw%5D%7B2%7D%29%24/i%29%5B0%5D%3B%0A%0A%20%20var%20rule%20%3D%20convertFromUnicode%28%22UTF-8%22%2C%20hlp.replace%28/%5C%5Bdomain%5C%5D/g%2C%20domain%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace%28/%5C%5Bdomainesc%5C%5D/g%2C%20domain.replace%28/%5C./g%2C%20%27%5C%5C.%27%29%29%29%3B%20%0A%0A%20%20var%20file%20%3D%20directoryService.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%20%20file.append%28%22HTTPSEverywhereUserRules%22%29%3B%0A%20%20file.append%28domain%20+%20%27.xml%27%29%3B%0A%20%20foStream.init%28file%2C%200x02%7C0x08%7C0x20%2C%200666%2C%200%29%3B%0A%20%20foStream.write%28rule%2C%20rule.length%29%3B%0A%20%20foStream.close%28%29%3B%0A%20%20HTTPSEverywhereRulesEdit%20%26%26%20file.launch%28%29%3B%0A%7D%0A%0Afunction%20viewCert%28%29%20%7B%0A%20%20getCert%28%29%3B%0A%0A%20%20if%20%28%21gCert%20%7C%7C%20%21gSSLStatus%29%20%7B%0A%20%20%20%20alert%20%26%26%20alertsService.showAlertNotification%28img%2C%20lbl%20+%20loc.host%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u0421%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%20%u043D%u0435%20%u043C%u043E%u0436%u0435%u0442%20%u0431%u044B%u0442%u044C%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%21%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%0A%20%20if%20%28showSert%29%20%7B%0A%20%20%20%20sertViewer.viewCert%28window%2C%20gCert%29%3B%0A%20%20%20%20alertSound%20%26%26%20soundService.playEventSound%28%27EVENT_ALERT_DIALOG_OPEN%27%29%3B%0A%20%20%7D%0A%0A%20%20var%20sertListener%20%3D%20%7B%0A%20%20%20%20observe%3A%20function%28aSubject%2C%20aTopic%2C%20aData%29%20%7B%0A%20%20%20%20%20%20if%20%28aTopic%20%21%3D%20%27alertclickcallback%27%29%20return%3B%0A%20%20%20%20%20%20sertViewer.viewCert%28window%2C%20gCert%29%3B%0A%20%20%20%20%20%20alertSound%20%26%26%20soundService.playEventSound%28%27EVENT_ALERT_DIALOG_OPEN%27%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20if%20%28gSSLStatus.isUntrusted%0A%20%20%20%20%20%20%7C%7C%20gSSLStatus.isDomainMismatch%0A%20%20%20%20%20%20%7C%7C%20gSSLStatus.isNotValidAtThisTime%29%0A%20%20%20%20alert%20%26%26%20alertsService.showAlertNotification%28img%2C%20lbl%20+%20loc.host%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u0421%u0430%u0439%u0442%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u0435%u0442%20%u043D%u0435%u0432%u0430%u043B%u0438%u0434%u043D%u044B%u0439%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%21%5Cn%u041D%u0430%u0436%u043C%u0438%u0442%u0435%20%u0434%u043B%u044F%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20true%2C%20null%2C%20sertListener%2C%20%22%22%29%3B%0A%20%20else%20%7B%0A%20%20%20%20if%20%28loc.protocol%20%21%3D%20%27https%3A%27%29%20%7B%0A%20%20%20%20%20%20redirect%20%26%26%20%28loc.protocol%20%3D%20%27https%27%29%3B%0A%20%20%20%20%20%20HTTPSEverywhereRules%20%26%26%20createRule%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20alert%20%26%26%20alertsService.showAlertNotification%28img%2C%20lbl%20+%20loc.host%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u0421%u0430%u0439%u0442%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u0435%u0442%20%u0432%u0430%u043B%u0438%u0434%u043D%u044B%u0439%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%21%5Cn%u041D%u0430%u0436%u043C%u0438%u0442%u0435%20%u0434%u043B%u044F%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20true%2C%20null%2C%20sertListener%2C%20%22%22%29%3B%0A%20%20%7D%0A%7D%0AviewCert%28%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%3Cruleset%20name%3D%22%28USER%20RULE%29%20%5Bdomain%5D%22%3E%0A%3Ctarget%20host%3D%22%5Bdomain%5D%22/%3E%0A%3Ctarget%20host%3D%22*.%5Bdomain%5D%22/%3E%0A%3Csecurecookie%20host%3D%22%5E%28%3F%3A.*%5C.%29%3F%5Bdomainesc%5D%24%22%20name%3D%22.+%22/%3E%0A%3Crule%20from%3D%22%5Ehttp%3A//%22%20to%3D%22https%3A//%22/%3E%0A%3C/ruleset%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

UPD: Исправил кое-что.

(если у кого svg-иконка кнопки корежит интерфейс, то вот png 16x16:

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAAnNCSVQICFXsRgQAAAAJcEhZcwAAAGcAAABnAdUo1CYAAAAZdEVYdFNvZnR3YXJlAHd3dy5pbmtzY2FwZS5vcmeb7jwaAAAA7UlEQVQoU3XQvyvEcRgH8FchJqNBLAyOSQyKxXyDsp1N/gN1wxUmRtvtXMqPLGy6MpBiEZcbDLdd1F0WkwH1GO7ie+eud32e5/n06vOpRwh2FVpSMRIaaRyF5tBv3FBQ82TwHzCh4k5dVk0o6m0H15aDAQ/qQsi3gxc9IdiQlZJy3A4upYM+t6YTt4l2SllR1WboCIJTB76NdgEWfRhzJdcNDFsPFn43kADnMjIy1pq1kfM/UBLKttzIybmXcyaUkuDTvGdVs4qO7Jj01QpepYV3KXkn5iwJj61fbFtxYcaqfYfWvCVf2BMdshfCD+SMw3jJ6NpdAAAAAElFTkSuQmCC

)

Клик по кнопке (или ПКМ по кнопке аддона HTTPS Everywhere (при наличии оного) - проверяет сертификат текущего сайта и (в зависимости от опций (в коде откомментированно, где что и за что отвечает)):
Открывает окно просмотра сертификата
Выводит всплывающее уведомление со статусом сертификата (клик по которому также открывает диалого просмотра сертификата)
Перенаправляет на https версию сайта (при наличии валидного сертификата) и создает (и открывает для редактирования) правило для аддона HTTPS Everywhere (шаблон во вкладке "справка").

А неплохо вышло.  Это я про результат, а не качество кода. :blush:

Прикрутить еще листенер на смену локации и может выйти какая-никакая, а замена почившему HTTPS-Finder'у.

Может, bunda1, возьметесь привести в божеский вид и допилить? :rolleyes:

Отредактировано turbot (02-07-2016 17:10:15)

Отсутствует

 

№146702-07-2016 15:15:42

thrower
Участник
 
Группа: Members
Зарегистрирован: 28-11-2013
Сообщений: 207
UA: Firefox 47.0

Re: Обсуждение кнопок CB

bunda1
C прошлой бывали непонятки, а вот новая редакция кнопки (№1465) работает просто безупречно!

Спасибо! :)

Отсутствует

 

№146802-07-2016 15:55:57

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

turbot пишет

Может, bunda1, возьметесь привести в божеский вид и допилить? :rolleyes:

:) ну нет, я не знаю где взять время что бы допилить свои кнопки, а тут для меня незнакомая тема.

Отсутствует

 

№146902-07-2016 16:31:14

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

bunda1
Я и не настаиваю. :) Мож, и осилю сам что-то наваять, что не стыдно будет в готовые выложить. :)

Отсутствует

 

№147004-07-2016 19:26:24

firefan
Участник
 
Группа: Members
Зарегистрирован: 23-06-2016
Сообщений: 16
UA: Firefox 47.0

Re: Обсуждение кнопок CB

turbot, огромное спасибо за кнопку сертификата.

Я правильно понимаю, что всплывающее сообщение о том, что сертификат валиден - это просто дублирование информации с цветных замочков перед адресной строкой? Было бы интересней, если бы по нажатию на кнопку (опционально) сертификат проверялся бы в OCSP. Это будет полезно для тех, кто отключил эту опцию в настройках Firefox, но при этом хотел бы иметь возможность выборочной проверки.

Также во всплывающем сообщении очень уместно смотрелись бы страны выпуска всей цепочки сертификатов типа US-US-RU. Это позволило бы на глаз определять любителей государственного или корпоративного MITM (к примеру, цепочка CN-CN-US для google.com сходу указывала бы, что, во-первых, вы в Китае, а во-вторых большой брат слишком сильно заботится о вас, и незаконно использует свой CA, на который пора писать абузу).

Отсутствует

 

№147104-07-2016 20:06:31

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

firefan
Нет. Замочек гораздо информативнее. Допустим, при наличии активного смешанного контента. Кнопка на такие нюансы внимания не обращает. Проверяется только статус сертификата сервера и его наличие. Вообще, изначально она предназначена просто просмотреть текущий сертификат. Остальное - побочные эффекты. Которые, внезапно, весьма полезными оказались. Как возможность обнаружить наличие https-версии и просмотреть статус/сертификат у сайта, даже на его http-версии.

firefan пишет

Также во всплывающем сообщении очень уместно смотрелись бы

Не спорю. Но я не осилю. Это надо парсить полученные ответные данные. Даж не предположу, как к этому подступиться. Если только кто другой возьмется. idontnow.gif

Отсутствует

 

№147205-07-2016 15:05:38

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2129
UA: Firefox 45.0

Re: Обсуждение кнопок CB

turbot пишет

Это надо парсить полученные ответные данные. Даж не предположу, как к этому подступиться.

А что ты предполагаешь парсить? Если наличие и информацию из этой строки

скрытый текст

Выделить код

Код:

data:image/png;base64,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1KnhFd59V0ybJlascEv23FNcfbVef790PnAAaGBEXSrR0m7NGjFzZqw6K1fqI7yXX3ZLWrfWf056yhRmwgOAUERdivnqK7H//jVX08Z2t9yix56jXTv98RYt8LQFAICEqEtnxcX6CO/dd90SbWB37bX6f7ShHgDAQNSlv2XL9OdTSkrckv3204d3V18tWrVKducAIPmIOiVUV+tfSLjlFvHRR25hly56BF5xhf70CgA0YUSdQnbv1n9jZeZM/evnju7d9ac6R4xIducAIGmIOuVogVdQoAfeunVuYVGROOusZPcMAJKDqFNUVZV45BFx883i88/1lwsXissuS3afACA5iDql/fSTeOopsW2bGD1aNG+e7N4AQHIQdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFEXUAAMURdQAAxRF1AADFKRV1LVvvuf8+HRrz9AEAUtxXm77/YfNWRaJuy5bt327Z3pinDwCQFjq1bdW2batabJhyUQcAQP0i6gAAiiPqAACKI+oAAIoj6gAAiiPqAACKI+oAAIoj6gAAiiPqAACKI+oAAIpL3ai77777NmzYsGPHjmSfonTVsmXLbt26XX311cnuCAAkWYpG3e1z5rRq2XL48OH77rtvsk9Ruvrmm28WL168fceOG6ZMSXZfACCZUjTqbrhBuz5P6dix4/bt/PRzLbVq1eq7776bM2fO7bffnuy+AEAypWjUTZ48+Y477ti6dWuyz096a9OmzfXXX3/33XcnuyMAkEypG3XacISoqyMt6rTBMVEHoIlL6ajbsmVLss9Pemvbti1RBwApHXU//vhjss9PemvXrh1RBwDpE3UvTu407BFz8ehZq1+4sley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


то, вроде, парсить не сложно. Вот, попробуй понажимать
скрытый текст

Выделить код

Код:

try {
    var result = [], {SSLStatus} = gBrowser.securityUI.QueryInterface(Ci.nsISSLStatusProvider);
    var tree = Cc["@mozilla.org/security/nsASN1Tree;1"].createInstance(Ci.nsIASN1Tree);

    for(var cert = SSLStatus.serverCert; cert; cert = cert.issuer) {
        tree.loadASN1Structure(cert.ASN1Structure);
        for(var res, ind = 0; ind < tree.rowCount; ind++)
            if (tree.getCellText(ind, {}) == "Subject") {
                res = tree.getDisplayData(ind);
                break;
            }
        var array = res.split("\n");
        var country = array.find(str => str.startsWith("C = "));
        result.unshift((country ? country.slice(4) : "??") + array.map(str => "\t\t" + str).join("\n"));
    }
    alert(result.join("\n\n\n"));

} catch(ex) {}

Отсутствует

 

№147305-07-2016 20:06:28

turbot
Участник
 
Группа: Members
Зарегистрирован: 09-10-2011
Сообщений: 2529
UA: Firefox 50.0

Re: Обсуждение кнопок CB

Dumby

то, вроде, парсить не сложно.

Для меня - сложно. shuffle.gif Спасибо.

firefan

Также во всплывающем сообщении очень уместно смотрелись бы страны выпуска всей цепочки сертификатов типа US-US-RU

Готово:

Выделить код

Код:

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%3E%u041F%u0440%u043E%u0432%u0435%u0440%u0438%u0442%u044C%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%20%u0434%u043B%u044F%20%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/svg+xml%3Bbase64%2CPD94bWwgdmVyc2lvbj0iMS4wIiB%20lbmNvZGluZz0id2luZG93cy0xMjUyIj8+DQo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTYuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iNTQ4LjI5cHgiIGhlaWdodD0iNTQ4LjI5MXB4IiB2aWV3Qm94PSIwIDAgNTQ4LjI5IDU0OC4yOTEiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDU0OC4yOSA1NDguMjkxOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8Zz4NCgkJPGc+DQoJCQk8cGF0aCBkPSJNMzY4LjgyMyw0MTEuODc5Yy02LjQyNSwwLTEwLjA2OCwwLjUyNC0xMS45ODQsMC44NzJ2MzIuMjgzaDEwLjQyMWMxMy4xOTUsMCwyMS4wMDctNi41OTQsMjEuMDA3LTE2LjgzNCAgICAgQzM4OC4yNjcsNDE3LjQzOSwzODAuOTcsNDEyLjA1MywzNjguODIzLDQxMS44Nzl6Ii8+DQoJCQk8cGF0aCBkPSJNNDcyLjkyOSwxMzEuMzk5Yy0wLjAzMS0yLjUxOC0wLjgyOC01LTIuNTU2LTYuOTY0TDM2NC42NSwzLjY3N2MtMC4wMjEtMC4wMzEtMC4wNTItMC4wNDItMC4wODktMC4wNzMgICAgIGMtMC42MjUtMC43MDctMS4zNTUtMS4yODctMi4xMjctMS43OTVjLTAuMjMtMC4xNTItMC40NjItMC4yODYtMC43MDMtMC40MjFjLTAuNjgzLTAuMzY2LTEuMzg3LTAuNjY2LTIuMTI3LTAuODg3ICAgICBjLTAuMTk5LTAuMDYtMC4zNzEtMC4xMzktMC41NzEtMC4xOTRDMzU4LjIzLDAuMTE4LDM1Ny40LDAsMzU2LjU2NiwwSDk2Ljc1N0M4NC45MDQsMCw3NS4yNTUsOS42NTEsNzUuMjU1LDIxLjUwMlY1MjYuNzkgICAgIGMwLDExLjg1OCw5LjY0OSwyMS41MDEsMjEuNTAyLDIxLjUwMWgzNTQuNzc2YzExLjg2MiwwLDIxLjUwMi05LjY0MywyMS41MDItMjEuNTAxVjEzMi42MDMgICAgIEM0NzMuMDM1LDEzMi4xOTksNDcyLjk3MywxMzEuNzk1LDQ3Mi45MjksMTMxLjM5OXogTTE5NC41NzIsNDg5Ljk5MmM3Ljk4OSwwLDE2Ljg0Mi0xLjczNywyMi4wNS0zLjgyMmwzLjk5LDIwLjY2MSAgICAgYy00Ljg2MSwyLjQzMS0xNS43OTgsNS4wNC0zMC4wMjcsNS4wNGMtNDAuNDM5LDAtNjEuMjc5LTI1LjE3MS02MS4yNzktNTguNWMwLTM5LjkyNiwyOC40NzMtNjIuMTQ3LDYzLjg4Ni02Mi4xNDcgICAgIGMxMy43MTEsMCwyNC4xMjQsMi43ODcsMjguODA2LDUuMjA3bC01LjM3NSwyMS4wMDljLTUuMzg2LTIuMjYyLTEyLjg1NC00LjM0Mi0yMi4yMTUtNC4zNDIgICAgIGMtMjEuMDA5LDAtMzcuMzIxLDEyLjY2OC0zNy4zMjEsMzguNzFDMTU3LjA4LDQ3NS4yNDEsMTcwLjk1OCw0ODkuOTkyLDE5NC41NzIsNDg5Ljk5MnogTTMxMi41OTIsNTEwLjEzM2gtNzQuNjM5VjM5My4xNGg3Mi4yMTQgICAgIHYyMS43aC00NS42NnYyNC4yOTloNDMuMDU2djIxLjUxOWgtNDMuMDU2djI3Ljc3M2g0OC4wODVWNTEwLjEzM3ogTTM5MS45MSw1MTAuMTMzYy0xLjkxMS0zLjMwMy00LjY4My0xMi44NDctOC4xNTctMjcuMjU1ICAgICBjLTMuMTI5LTE0LjU3OC04LjE2Mi0xOC41NzgtMTguOTI0LTE4Ljc0NmgtNy45OXY0Ni4wMDZoLTI2LjIwNVYzOTQuNzA0YzguNTA0LTEuMzk2LDIxLjE3Mi0yLjQzNywzNS4yMzktMi40MzcgICAgIGMxNy4zNTUsMCwyOS40OTYsMi42MDQsMzcuODM4LDkuMTk4YzYuOTQ5LDUuNTYzLDEwLjc2MiwxMy43MTcsMTAuNzYyLDI0LjQ4MWMwLDE0LjkyLTEwLjU4OCwyNS4xNjctMjAuNjUxLDI4Ljh2MC41NCAgICAgYzguMTU3LDMuMjkzLDEyLjY2NiwxMS4xMDMsMTUuNjE3LDIxLjg2NGMzLjY0NywxMy4xODcsNy4yOCwyOC40NjIsOS41MzcsMzIuOTg3SDM5MS45MVY1MTAuMTMzeiBNOTYuNzU3LDM2NS4wODVWMjEuNTA3SDM0NS44MiAgICAgdjExMC4wMTVjMCw1LjkzNSw0LjgwOSwxMC43NSwxMC43NTEsMTAuNzVoOTQuOTYybDAuMDEsMjIyLjgxM0g5Ni43NTd6Ii8+DQoJCTwvZz4NCgkJPHBhdGggZD0iTTM1OS4wODUsMTUxLjA0NGMwLTYuNDA3LTMuMzU5LTExLjk5OC04LjM5My0xNS4yMDhjMi45NjUtNC44NTQsMy42MTctMTEuMDA4LDEuMTcxLTE2LjYxNWwtMy4wMDgtNi44OTcgICAgYy0xLjktNC4zNjUtNS4zNDUtNy41NTctOS40MDgtOS4zMTVjLTAuMTg5LTQuMzM4LTEuODkxLTguNjI3LTUuMjA3LTExLjk0NGwtNS4zMjMtNS4zMjFjLTQuMjcyLTQuMjczLTEwLjE2Mi01LjkxOC0xNS43MDYtNS4wMSAgICBjLTEuMTIyLTUuODktNS4xMDMtMTEuMTA2LTExLjA5Mi0xMy40NmwtNy4wMDktMi43NjRjLTQuOTQ0LTEuOTI5LTEwLjE4My0xLjQ4OC0xNC42MDMsMC42OTYgICAgYy0zLjEzNy0yLjY1MS03LjEyNi00LjMwNy0xMS41NTgtNC4zMDdoLTcuNTM1Yy01LjU2MiwwLTEwLjQ3NSwyLjU3NS0xMy43OTIsNi41MzNjLTQuOTY2LTMuNDEtMTEuNDk5LTQuMzAyLTE3LjQxNS0xLjcxMSAgICBsLTYuODk3LDIuOTk1Yy01LjIyMSwyLjI4NC04LjczNiw2Ljc0Ni0xMC4xMzQsMTEuODQzYy00LjI3MywwLjI0Mi04LjQ3LDEuOTMtMTEuNzI4LDUuMTg3bC01LjMyMiw1LjMyMSAgICBjLTMuNzA0LDMuNzAxLTUuNDA3LDguNjA2LTUuMjMxLDEzLjQ1NmMtNS41NTEsMS4zMTUtMTAuMzk0LDUuMjI0LTEyLjY0MSwxMC45NDhsLTIuNzYzLDdjLTIuMDkzLDUuMzQ0LTEuNCwxMS4wNDIsMS4yNjcsMTUuNjQ4ICAgIGMtMy4zNzEsMy4yNjgtNS40ODgsNy44NDgtNS40ODgsMTIuOTI3djcuNTJjMCw1LjMyMywyLjMzMywxMC4wNTMsNS45OTUsMTMuMzQ3Yy0yLjM5NCw0LjY2Mi0yLjgzNSwxMC4yODktMC41NjQsMTUuNDY1ICAgIGwzLjAwNSw2Ljg5N2MyLjE4MSw1LjAzMiw2LjQxMiw4LjQ3OCwxMS4yNzYsOS45NjdjLTAuNDQxLDUuMTIzLDEuMjIsMTAuMzg1LDUuMTQ1LDE0LjI5OWw1LjMyMiw1LjMyICAgIGM0LjAzMiw0LjA0Nyw5LjUxNSw1LjY5NCwxNC43OTMsNS4wOThjMS43NSw0LjU2OSw1LjI4OSw4LjQyOCwxMC4yMDIsMTAuMzYybDEuMDkyLDAuNDM3TDE3OC41LDMyMmwzNy4zMjEtMjAuNDYzICAgIGMwLDAsOS42MzgsNjAuNzk5LDkuNjM4LDU4Ljk5OWMwLTEuNDU0LDIyLjMwNy04MS42MTMsMzAuOTUzLTExMi41NjFjMS41ODUsMC40NzMsMy4yNjMsMC43NDYsNS4wMDgsMC43NDZoMy4xMzlsMzYuNzQ2LDk3Ljk3MiAgICB2LTUxLjE3bDM1LjUxNywyNC4wNzhsLTMyLjE2My04MS40NTJsMC42LTAuMjU3YzQuMTczLTEuODMsNy4yNTQtNS4wNzYsOS4wNjUtOC44OThjNS4yMDcsMC41MzksMTAuNjE0LTEuMTEzLDE0LjYwNC01LjExOSAgICBsNS4zMjMtNS4zMmM0LjU4OC00LjU4NSw2LjE0Mi0xMS4wMTMsNC43NTUtMTYuOWM0Ljk4OC0xLjYwNiw5LjI1LTUuMjYyLDExLjMwOC0xMC41MDlsMi43NjItNy4wMDQgICAgYzEuNjE2LTQuMTMzLDEuNTMzLTguNDcxLDAuMjIxLTEyLjM2OWMzLjUzOC0zLjI5OSw1Ljc5NS03Ljk3MSw1Ljc5NS0xMy4yMDN2LTcuNTI1SDM1OS4wODV6IE0yNjUuMTg5LDIxOS4wNzEgICAgYy0zNS41LDAtNjQuMjYzLTI4Ljc3NC02NC4yNjMtNjQuMjU3YzAtMzUuNDk1LDI4Ljc2OS02NC4yNTgsNjQuMjYzLTY0LjI1OGMzNS40ODUsMCw2NC4yNTIsMjguNzY5LDY0LjI1Miw2NC4yNTggICAgQzMyOS40NDEsMTkwLjI5NywzMDAuNjc1LDIxOS4wNzEsMjY1LjE4OSwyMTkuMDcxeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u0412%u044B%u043F%u043E%u043B%u043D%u044F%u0442%u044C%20%u043F%u043E%20%u041F%u041A%u041C%20%u043D%u0430%20%u043A%u043D%u043E%u043F%u043A%u0435%20HTTPS%20Everywhere%0Avar%20HEBtn%20%3D%20document.getElementById%28%27https-everywhere-button%27%29%3B%0Aif%20%28%21HEBtn%29%20return%3B%0AHEBtn.oncontextmenu%20%3De%3D%3E%20this.click%28%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bconst%20soundService%20%3D%20Cc%5B%22@mozilla.org/sound%3B1%22%5D.createInstance%28Ci.nsISound%29%3B%0Aconst%20alertsService%20%3D%20Cc%5B%22@mozilla.org/alerts-service%3B1%22%5D.getService%28Ci.nsIAlertsService%29%3B%0Aconst%20directoryService%20%3D%20Cc%5B%22@mozilla.org/file/directory_service%3B1%22%5D.getService%28Ci.nsIProperties%29%3B%0Aconst%20foStream%20%3D%20Cc%5B%22@mozilla.org/network/file-output-stream%3B1%22%5D.createInstance%28Ci.nsIFileOutputStream%29%3B%0Aconst%20fus%20%3D%20Cc%5B%22@mozilla.org/docshell/urifixup%3B1%22%5D.getService%28Ci.nsIURIFixup%29%3B%0Aconst%20sertViewer%20%3D%20Cc%5B%22@mozilla.org/nsCertificateDialogs%3B1%22%5D.getService%28Ci.nsICertificateDialogs%29%3B%0A%0Avar%20img%20%3D%20self.image%2C%20lbl%20%3D%20self.label%2C%20hlp%20%3D%20self.Help%3B%0A%0Alet%20loc%20%3D%20window.gBrowser.selectedBrowser.contentWindow.location%3B%0A%0A//%20%u041E%u043F%u0446%u0438%u0438%3A%0A//%20%u0421%u043E%u0437%u0434%u0430%u0442%u044C%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20%u043F%u0440%u043E%u0444%u0438%u043B%u044F%2C%20%u0432%20%u043F%u0430%u043F%u043A%u0435%20HTTPSEverywhereUserRules%2C%20xml-%u0444%u0430%u0439%u043B%20%u0441%20%u043F%u0440%u0430%u0432%u0438%u043B%u043E%u043C%20%u0434%u043B%u044F%20%u0430%u0434%u0434%u043E%u043D%u0430%20HTTPS%20Everywhere%0A//%20%u0428%u0430%u0431%u043B%u043E%u043D%20%u043F%u0440%u0430%u0432%u0438%u043B%20%u043D%u0430%u0445%u043E%u0434%u0438%u0442%u0441%u044F%20%u0432%u043E%20%u0432%u043A%u043B%u0430%u0434%u043A%u0435%20%22%u041F%u043E%u043C%u043E%u0449%u044C%22%0Avar%20HTTPSEverywhereRules%20%3D%20true%2C%0A//%20%u041E%u0442%u043A%u0440%u044B%u0442%u044C%20%u0434%u043B%u044F%20%u0440%u0435%u0434%u0430%u043A%u0442%u0438%u0440%u043E%u0432%u0430%u043D%u0438%u044F%20%28%u0432%20%u0430%u0441%u0441%u043E%u0446%u0438%u0438%u0440%u043E%u0432%u0430%u043D%u043D%u043E%u0439%20%u0441%20xml-%u0444%u0430%u0439%u043B%u0430%u043C%u0438%20%u043F%u0440%u043E%u0433%u0440%u0430%u043C%u043C%u0435%29%20%u0441%u043E%u0437%u0434%u0430%u043D%u043D%u043E%u0435%20%u043F%u0440%u0430%u0432%u0438%u043B%u043E%0A%20%20%20%20HTTPSEverywhereRulesEdit%20%3D%20true%2C%0A//%20%u041F%u0435%u0440%u0435%u043D%u0430%u043F%u0440%u0430%u0432%u0438%u0442%u044C%20%u043D%u0430%20https%20%u0432%u0435%u0440%u0441%u0438%u044E%20%u0441%u0430%u0439%u0442%u0430%2C%20%u043F%u0440%u0438%20%u043D%u0430%u043B%u0438%u0447%u0438%u0438%20%u0443%20%u043D%u0435%u0433%u043E%20%u0432%u0430%u043B%u0438%u0434%u043D%u043E%u0433%u043E%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A%20%20%20%20redirect%20%3D%20true%2C%0A//%20%u041E%u0442%u043A%u0440%u044B%u0432%u0430%u0442%u044C%20%u0430%u0432%u0442%u043E%u043C%u0430%u0442%u0438%u0447%u0435%u0441%u043A%u0438%20%u0434%u0438%u0430%u043B%u043E%u0433%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A%20%20%20%20showSert%20%3D%20false%2C%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u0435%20%u0443%u0432%u0435%u0434%u043E%u043C%u043B%u0435%u043D%u0438%u0435%20%u0441%u043E%20%u0441%u0442%u0430%u0442%u0443%u0441%u043E%u043C%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A//%20%u041A%u043B%u0438%u043A%20%u043F%u043E%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u0448%u043A%u0435%20-%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u0442%20%u0434%u0438%u0430%u043B%u043E%u0433%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%20%28%u043F%u0440%u0438%20%u043D%u0430%u043B%u0438%u0447%u0438%u0438%20%u043E%u043D%u043E%u0433%u043E%20%u0443%20%u0441%u0430%u0439%u0442%u0430%29%0A%20%20%20%20alert%20%3D%20true%2C%0A//%20%u0417%u0432%u0443%u043A%u043E%u0432%u043E%u0435%20%u0443%u0432%u0435%u0434%u043E%u043C%u043B%u0435%u043D%u0438%u0435%20%u043F%u0440%u0438%20%u043E%u0442%u043A%u0440%u044B%u0442%u0438%u0438%20%u0434%u0438%u0430%u043B%u043E%u0433%u0430%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u0430%0A%20%20%20%20alertSound%20%3D%20true%2C%0A//%20%u041F%u043E%u043A%u0430%u0437%u044B%u0432%u0430%u0442%u044C%20%u0432%u043E%20%u0432%u0441%u043F%u043B%u044B%u0432%u0430%u044E%u0449%u0435%u043C%20%u0443%u0432%u0435%u0434%u043E%u043C%u043B%u0435%u043D%u0438%u0438%20%u043A%u043E%u0434%u044B%20%u0441%u0442%u0440%u0430%u043D%20%u0434%u043B%u044F%20%u0432%u0441%u0435%u0439%20%u0446%u0435%u043F%u043E%u0447%u043A%u0438%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%u043E%u0432%0A%20%20%20%20showIssuerCountryCode%20%3D%20true%3B%0A%0A%0A//%20chrome%3A//pippki/content/exceptionDialog.js%0Afunction%20badCertListener%28%29%20%7B%7D%0AbadCertListener.prototype%20%3D%20%7B%0A%20%20getInterface%3A%20function%20%28aIID%29%20%7B%0A%20%20%20%20return%20this.QueryInterface%28aIID%29%3B%0A%20%20%7D%2C%0A%20%20QueryInterface%3A%20function%28aIID%29%20%7B%0A%20%20%20%20if%20%28aIID.equals%28Ci.nsIBadCertListener2%29%20%7C%7C%0A%20%20%20%20%20%20%20%20aIID.equals%28Ci.nsIInterfaceRequestor%29%20%7C%7C%0A%20%20%20%20%20%20%20%20aIID.equals%28Ci.nsISupports%29%29%20%7B%0A%20%20%20%20%20%20return%20this%3B%0A%20%20%20%20%7D%0A%0A%20%20%20%20throw%20new%20Error%28Components.results.NS_ERROR_NO_INTERFACE%29%3B%0A%20%20%7D%2C%0A%20%20handle_test_result%3A%20function%20%28%29%20%7B%0A%20%20%20%20if%20%28gSSLStatus%29%20%7B%0A%20%20%20%20%20%20gCert%20%3D%20gSSLStatus.QueryInterface%28Ci.nsISSLStatus%29.serverCert%3B%0A%20%20%20%20%7D%0A%20%20%7D%2C%0A%20%20notifyCertProblem%3A%20function%20MSR_notifyCertProblem%28socketInfo%2C%20sslStatus%2C%20targetHost%29%20%7B%0A%20%20%20%20gBroken%20%3D%20true%3B%0A%20%20%20%20gSSLStatus%20%3D%20sslStatus%3B%0A%20%20%20%20this.handle_test_result%28%29%3B%0A%20%20%20%20return%20true%3B%20//%20suppress%20error%20UI%0A%20%20%7D%0A%7D%0A%0A//%20chrome%3A//pippki/content/exceptionDialog.js%0Afunction%20getURI%28%29%20%7B%0A%20%20let%20uri%20%3D%20fus.createFixupURI%28loc.href%2C%200%29%3B%0A%0A%20%20if%20%28%21uri%29%20%7B%0A%20%20%20%20return%20null%3B%0A%20%20%7D%0A%0A%20%20if%20%28uri.scheme%20%3D%3D%20%22http%22%29%20%7B%0A%20%20%20%20uri.scheme%20%3D%20%22https%22%3B%0A%20%20%7D%0A%0A%20%20if%20%28uri.port%20%3D%3D%20-1%29%20%7B%0A%20%20%20%20uri.port%20%3D%20443%3B%0A%20%20%7D%0A%0A%20%20return%20uri%3B%0A%7D%0A%0A//%20chrome%3A//pippki/content/exceptionDialog.js%0Afunction%20getCert%28%29%20%7B%0A%20%20gCert%20%3D%20null%3B%0A%20%20gSSLStatus%20%3D%20null%3B%0A%20%20gChecking%20%3D%20true%3B%0A%20%20gBroken%20%3D%20false%3B%0A%0A%20%20var%20uri%20%3D%20getURI%28%29%3B%0A%20%20var%20req%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%0A%20%20try%20%7B%0A%20%20%20%20if%20%28uri%29%20%7B%0A%20%20%20%20%20%20req.open%28%27GET%27%2C%20uri.prePath%2C%20false%29%3B%0A%20%20%20%20%20%20req.channel.notificationCallbacks%20%3D%20new%20badCertListener%28%29%3B%0A%20%20%20%20%20%20req.send%28null%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%20catch%20%28e%29%20%7B%0A%20%20%20%20Cu.reportError%28%22Attempted%20to%20connect%20to%20a%20site%20with%20a%20bad%20certificate%20in%20the%20add%20exception%20dialog.%20%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22This%20results%20in%20a%20%28mostly%20harmless%29%20exception%20being%20thrown.%20%22%20+%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Logged%20for%20information%20purposes%20only%3A%20%22%20+%20e%29%3B%0A%20%20%7D%20finally%20%7B%0A%20%20%20%20gChecking%20%3D%20false%3B%0A%20%20%7D%0A%0A%20%20if%20%28req.channel%20%26%26%20req.channel.securityInfo%29%20%7B%0A%20%20%20%20gSSLStatus%20%3D%20req.channel.securityInfo%0A%20%20%20%20%20%20.QueryInterface%28Ci.nsISSLStatusProvider%29.SSLStatus%3B%0A%20%20%20%20gCert%20%3D%20gSSLStatus.QueryInterface%28Ci.nsISSLStatus%29.serverCert%3B%0A%20%20%7D%0A%7D%3B%0A%0Afunction%20createRule%28%29%20%7B%0A%20%20//%20http%3A//stackoverflow.com/questions/6449340/how-to-get-top-level-domain-base-domain-from-the-url-in-javascript%0A%20%20let%20domain%20%3D%20loc.host.match%28/%5B-%5Cw%5D+%5C.%28%3F%3A%5B-%5Cw%5D+%5C.xn--%5B-%5Cw%5D+%7C%5B-%5Cw%5D%7B3%2C%7D%7C%5B-%5Cw%5D+%5C.%5B-%5Cw%5D%7B2%7D%29%24/i%29%5B0%5D%3B%0A%0A%20%20var%20rule%20%3D%20convertFromUnicode%28%22UTF-8%22%2C%20hlp.replace%28/%5C%5Bdomain%5C%5D/g%2C%20domain%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.replace%28/%5C%5Bdomainesc%5C%5D/g%2C%20domain.replace%28/%5C./g%2C%20%27%5C%5C.%27%29%29%29%3B%20%0A%0A%20%20var%20file%20%3D%20directoryService.get%28%22ProfD%22%2C%20Ci.nsIFile%29%3B%0A%20%20file.append%28%22HTTPSEverywhereUserRules%22%29%3B%0A%20%20file.append%28domain%20+%20%27.xml%27%29%3B%0A%20%20foStream.init%28file%2C%200x02%7C0x08%7C0x20%2C%200666%2C%200%29%3B%0A%20%20foStream.write%28rule%2C%20rule.length%29%3B%0A%20%20foStream.close%28%29%3B%0A%20%20HTTPSEverywhereRulesEdit%20%26%26%20file.launch%28%29%3B%0A%7D%3B%0A%0Afunction%20getCountries%28%29%20%7B%0A%20%20try%20%7B%0A%20%20%20%20var%20result%20%3D%20%5B%5D%2C%20%7BSSLStatus%7D%20%3D%20gBrowser.securityUI.QueryInterface%28Ci.nsISSLStatusProvider%29%3B%0A%20%20%20%20var%20tree%20%3D%20Cc%5B%22@mozilla.org/security/nsASN1Tree%3B1%22%5D.createInstance%28Ci.nsIASN1Tree%29%3B%0A%0A%20%20%20%20for%28var%20cert%20%3D%20SSLStatus.serverCert%3B%20cert%3B%20cert%20%3D%20cert.issuer%29%20%7B%0A%20%20%20%20%20%20tree.loadASN1Structure%28cert.ASN1Structure%29%3B%0A%20%20%20%20%20%20for%28var%20res%2C%20ind%20%3D%200%3B%20ind%20%3C%20tree.rowCount%3B%20ind++%29%0A%20%20%20%20%20%20%20%20if%20%28tree.getCellText%28ind%2C%20%7B%7D%29%20%3D%3D%20%22Subject%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20res%20%3D%20tree.getDisplayData%28ind%29%3B%0A%20%20%20%20%20%20%20%20%20%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20var%20array%20%3D%20res.split%28%22%5Cn%22%29%3B%0A%20%20%20%20%20%20var%20country%20%3D%20array.find%28str%20%3D%3E%20str.startsWith%28%22C%20%3D%20%22%29%29%3B%0A%20%20%20%20%20%20result.unshift%28country%20%3F%20country.slice%284%29%20%3A%20%22%3F%3F%22%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20return%20result.join%28%22-%22%29%3B%0A%0A%20%20%7D%20catch%28ex%29%20%7B%7D%0A%7D%3B%0A%0Afunction%20viewCert%28%29%20%7B%0A%20%20getCert%28%29%3B%0A%0A%20%20if%20%28%21gCert%20%7C%7C%20%21gSSLStatus%29%20%7B%0A%20%20%20%20alert%20%26%26%20alertsService.showAlertNotification%28img%2C%20lbl%20+%20loc.host%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u0421%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%20%u043D%u0435%20%u043C%u043E%u0436%u0435%u0442%20%u0431%u044B%u0442%u044C%20%u043F%u043E%u043B%u0443%u0447%u0435%u043D%21%27%2C%20false%2C%20%22%22%2C%20null%2C%20%22%22%29%3B%0A%20%20%20%20return%3B%0A%20%20%7D%0A%0A%20%20let%20cns%20%3D%20showIssuerCountryCode%20%3F%20%27%28%27%20+%20getCountries%28%29%20+%20%27%29%27%20%3A%20%27%27%3B%0A%0A%20%20if%20%28showSert%29%20%7B%0A%20%20%20%20sertViewer.viewCert%28window%2C%20gCert%29%3B%0A%20%20%20%20alertSound%20%26%26%20soundService.playEventSound%28%27EVENT_ALERT_DIALOG_OPEN%27%29%3B%0A%20%20%7D%0A%0A%20%20var%20sertListener%20%3D%20%7B%0A%20%20%20%20observe%3A%20function%28aSubject%2C%20aTopic%2C%20aData%29%20%7B%0A%20%20%20%20%20%20if%20%28aTopic%20%21%3D%20%27alertclickcallback%27%29%20return%3B%0A%20%20%20%20%20%20sertViewer.viewCert%28window%2C%20gCert%29%3B%0A%20%20%20%20%20%20alertSound%20%26%26%20soundService.playEventSound%28%27EVENT_ALERT_DIALOG_OPEN%27%29%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%0A%20%20if%20%28gSSLStatus.isUntrusted%0A%20%20%20%20%20%20%7C%7C%20gSSLStatus.isDomainMismatch%0A%20%20%20%20%20%20%7C%7C%20gSSLStatus.isNotValidAtThisTime%29%0A%20%20%20%20alert%20%26%26%20alertsService.showAlertNotification%28img%2C%20lbl%20+%20loc.host%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u0421%u0430%u0439%u0442%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u0435%u0442%20%u043D%u0435%u0432%u0430%u043B%u0438%u0434%u043D%u044B%u0439%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%21%20%27%20+%20cns%20+%20%27%5Cn%u041D%u0430%u0436%u043C%u0438%u0442%u0435%20%u0434%u043B%u044F%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20true%2C%20null%2C%20sertListener%2C%20%22%22%29%3B%0A%20%20else%20%7B%0A%20%20%20%20if%20%28loc.protocol%20%21%3D%20%27https%3A%27%29%20%7B%0A%20%20%20%20%20%20redirect%20%26%26%20%28loc.protocol%20%3D%20%27https%27%29%3B%0A%20%20%20%20%20%20HTTPSEverywhereRules%20%26%26%20createRule%28%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20alert%20%26%26%20alertsService.showAlertNotification%28img%2C%20lbl%20+%20loc.host%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%27%u0421%u0430%u0439%u0442%20%u0438%u0441%u043F%u043E%u043B%u044C%u0437%u0443%u0435%u0442%20%u0432%u0430%u043B%u0438%u0434%u043D%u044B%u0439%20%u0441%u0435%u0440%u0442%u0438%u0444%u0438%u043A%u0430%u0442%21%20%27%20+%20cns%20+%20%27%5Cn%u041D%u0430%u0436%u043C%u0438%u0442%u0435%20%u0434%u043B%u044F%20%u043F%u0440%u043E%u0441%u043C%u043E%u0442%u0440%u0430%27%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20true%2C%20null%2C%20sertListener%2C%20%22%22%29%3B%0A%20%20%7D%0A%7D%3B%0AviewCert%28%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%3Cruleset%20name%3D%22%28USER%20RULE%29%20%5Bdomain%5D%22%3E%0A%3Ctarget%20host%3D%22%5Bdomain%5D%22/%3E%0A%3Ctarget%20host%3D%22*.%5Bdomain%5D%22/%3E%0A%3Csecurecookie%20host%3D%22%5E%28%3F%3A.*%5C.%29%3F%5Bdomainesc%5D%24%22%20name%3D%22.+%22/%3E%0A%3Crule%20from%3D%22%5Ehttp%3A//%22%20to%3D%22https%3A//%22/%3E%0A%3C/ruleset%3E%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Спасибки, соответственно, Dumby. :)

Отредактировано turbot (05-07-2016 20:07:10)

Отсутствует

 

№147405-07-2016 21:25:02

firefan
Участник
 
Группа: Members
Зарегистрирован: 23-06-2016
Сообщений: 16
UA: Firefox 47.0

Re: Обсуждение кнопок CB

turbot, Dumby, вы лучшие, спасибо!

Есть небольшая особенность: если в поле Issuer больше 4 строк, то страна отображается как ??. Примеры: https://vk.com https://www.livejournal.com
(Хотя может и не в количестве строк дело, а в чем-то другом).

Отредактировано firefan (05-07-2016 21:39:04)

Отсутствует

 

№147507-07-2016 15:37:02

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Обсуждение кнопок CB

lokiju просит помочь с кодом Link Tooltips:

lokiju пишет

Показывает адрес ссылки под курсором возле курсора.

Выделить код

Код:

/*Initialization Code*/
/* :::::::: Link Tooltips :::::::::::::::*/

getBrowser().addEventListener("DOMContentLoaded", function(aEvent) {
    var doc = new XPCNativeWrapper(aEvent.originalTarget);
    var links = doc.evaluate("//a[@href and @href!='']", doc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var link, i = 0; (link = links.snapshotItem(i)); i++)
    {
        link.title = link.title ? link.title + " <" + link.href + ">" : link.href;
    }
}, true);

Но  с FF38 ЕМНИП начались проблемы: после просмотра длинного адреса тултип не уменьшается при просмотре короткого адреса до перезагрузки браузера. Картинки

Картинки
[url=http://www.fotolink.su/v.php?id=5662b3bf5076b0191e6159b67a5112a0]http://www.fotolink.su/pic_s/5662b3bf50 … 5112a0.jpg
1280x778(125.46 kB)[/url]
[url=http://www.fotolink.su/v.php?id=7313fd74a430c9272883d2d77316be83]http://www.fotolink.su/pic_s/7313fd74a4 … 16be83.jpg
1280x877(734.24 kB)[/url]
[url=http://www.fotolink.su/v.php?id=5e883a4772c347ac75194f4da3533b7a]http://www.fotolink.su/pic_s/5e883a4772 … 533b7a.jpg
1280x877(125.89 kB)[/url]

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]