В 63(может немного раньше) перестал работать код для кнопки:
this.tooltipText = "Л = about:config | С = about:support | П = about:about"; this.onclick = function(event) { if(event.button == 2) { // ПКМ getBrowser (). selectedTab = getBrowser (). addTab ("about:about"); } else if(event.button == 1) { // СКМ getBrowser (). selectedTab = getBrowser (). addTab ("about:support"); } else if(event.button == 0) { // ЛКМ getBrowser (). selectedTab = getBrowser (). addTab ("about:config"); } };
Отсутствует
vitalii201, сюда гляньте: https://forum.mozilla-russia.org/viewto … 42#p762542
Попробуйте addTab заменить на addTrustedTab.
типа того:
На форуме
Coroner, отлично, большое спасибо!
Отсутствует
Я посылаю xmlhttprequest.
Из ответа сервера выделяю нужную строку. Но она содержит html сущности в виде ' и т. д.
Чтобы декодировать эту строку, я создаю textarea и присваиваю ей innerHTML в виде этой строки. А потом, по идее, если взять textarea.value то это должна быть уже декодированная строка.
Вот мой код
var txt = document.createElement('textarea'); var xmlhttp = new XMLHttpRequest(); xmlhttp.open('GET', url, true) xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { var str = xmlhttp.responseText.split('xyz')[0].split('abc')[1]; txt.innerHTML = str; 1_str = txt.value; // это должна быть декодированная строка } } } xmlhttp.send(null);
Но строчка txt.innerHTML = str даёт ошибку SyntaxError: An invalid or illegal string was specified
Причём в принципе этот способ декодирования у меня работает. Но только если он не внутри xmlhttprequest.
В чём тут дело?
Отсутствует
сайт открыт в режиме ReaderMode (about:reader). Нужно сохранить страницу как единый HTML-файл. (UnMHT сохраняет, но мне не нужен MHT-формат…)
P.S. разобрался сам и доработал код Save snapshot to html:
custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3ESave++%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bcustombuttons-stdicon-1%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//%20%u0413%u043B%u043E%u0431%u0430%u043B%u044C%u043D%u044B%u0435%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20-%20%u0440%u0430%u0441%u043F%u043E%u043B%u043E%u0436%u0438%u0442%u044C%20%u0432%20%u043A%u043D%u043E%u043F%u043A%u0435%2C%20%u0440%u0430%u0441%u043F%u043E%u043B%u043E%u0436%u0435%u043D%u043D%u043E%u0439%20%u0432%20%u043D%u0430%u0447%u0430%u043B%u0435%20%u043F%u0430%u043D%u0435%u043B%u0438%2C%20%u043D%u0430%u043F%u0440%u0438%u043C%u0435%u0440%20%u0432%20Compact%20Menu%0Awindow.statusTextField%20%3D%20function%20%28text%2C%20time%29%20%7B%09//%20%u041F%u043E%u043A%u0430%u0437%20%u0441%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u044F%20%u0432%20%u0441%u0442%u0440%u043E%u043A%u0435%20%u0441%u0442%u0430%u0442%u0443%u0441%u0430%0A%09time%20%3D%20time%20%7C%7C%203000%3B%20//%20%u0430%u0440%u0433%u0443%u043C%u0435%u043D%u0442%20%u0444%u0443%u043D%u043A%u0446%u0438%u0438%20%u043D%u0435%20%u0443%u043A%u0430%u0437%u0430%u043D%0A%09XULBrowserWindow.statusTextField.label%20%3D%20text%3B%20setTimeout%28%28%29%3D%3E%20XULBrowserWindow.statusTextField.label%20%3D%20%27%27%2Ctime%29%3B%0A%7D%3B%0A%0Awindow.dateout%20%3D%20function%20%28date%29%20%7B%0A%09var%20d%20%3D%20new%20Date%28%29%2C%20z%20%3D%20function%28n%29%7Breturn%20%28n%20%3C%2010%20%3F%20%270%27%20%3A%20%27%27%29%20+%20n%7D%3B%0A%09if%20%28%20date%20%3D%3D%201%20%29%0A%09%09return%20d.toLocaleFormat%28%29%0A%09else%20if%20%28%20date%20%3D%3D%202%20%29%0A%09%09return%20d.toLocaleFormat%28%22%25y-%25m-%25d%22%29%0A%09else%20if%20%28%20date%20%3D%3D%203%20%29%0A%09%09return%20d.toLocaleFormat%28%27%25Y.%25m.%25d%27%29%20+%27_%27+%20d.toLocaleFormat%28%27%25H%27%29%20+%27%u0589%27+%20d.toLocaleFormat%28%27%25M.%25S%27%29%0A%09else%0A%09%09return%20z%28d.getHours%28%29%29%20+%27%u0589%27+%20z%28d.getMinutes%28%29%29%20+%27.%27+%20z%28d.getSeconds%28%29%29%3B%0A%7D%3B%0A%0Awindow.Warning%20%3D%20function%28%20text%2C%20id%2C%20color%2C%20time%20%29%7B%20//%20%u0437%u043D%u0430%u0447%u043E%u043A%20%u0438%u0434%u0435%u043D%u0442%u0438%u0444%u0438%u043A%u0430%u0446%u0438%u0438%20%u0441%u0430%u0439%u0442%u0430%20%u043C%u0438%u0433%u0430%u0435%u0442%u2026%0A%09id%20%3D%20id%20%7C%7C%20%22urlbar%22%3B%20color%20%3D%20color%20%7C%7C%20%22orange%22%3B%20time%20%3D%20time%20%7C%7C%20500%3B%20//%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%u044B%20%u043F%u043E-%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E%0A%09if%20%28text%29%20window.statusTextField%28text%29%3B%0A%09document.getElementById%28id%29.style.background%20%3D%20color%3B%0A%09setTimeout%28%28%29%3D%3E%20document.getElementById%28id%29.style.background%20%3D%20%22%22%2C%20time%29%3B%0A%7D%3B%0A%0Awindow.sleep%20%3D%20function%28ms%29%20%7B%0A%09ms%20+%3D%20new%20Date%28%29.getTime%28%29%3B%0A%09while%20%28new%20Date%28%29%20%3C%20ms%29%7B%7D%0A%7D%0A%0Awindow.getPlatform%20%3D%20function%20%28update%29%20%7B%20//%20%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0438%u0442%u044C%20%u0441%u0438%u0441%u0442%u0435%u043C%u0443%2C%20update%20%3D%20true%20%u043F%u0435%u0440%u0435%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0438%u0442%u044C%0A%09var%20sys%20%3D%20custombuttons.getPrefs%28%22CB.Platform%22%29%3B%0A%09if%20%28%20sys%20%21%3D%3D%20null%20%26%26%20%21update%20%29%20return%20sys%0A%09%09else%20sys%20%3D%20%27windows%27%3B%0Avar%20file%20%3D%20Services.dirsvc.get%28%27CurProcD%27%2C%20Ci.nsIFile%29%3B%0A%09try%20%7B%0A%09%09file.initWithPath%28%27/usr/bin/cat%27%29%3B%0A%09%09if%28file.exists%28%29%29%20sys%20%3D%20%27linux%27%3B%0A%09%7D%20catch%28e%29%20%7B%7D%3B%0A%09custombuttons.setPrefs%28%27CB.Platform%27%2C%20sys%29%3B%20return%20sys%3B%20//%20%u0437%u0430%u043F%u043E%u043C%u043D%u0438%u0442%u044C%20%u0442%u0438%u043F%20%u0441%u0438%u0441%u0442%u0435%u043C%u044B%0A%7D%3B%0A%0Awindow.exec%20%3D%20function%20%28path%2C%20args%20%29%20%7B%20//%20%u0443%u043A%u0430%u0437%u0430%u0442%u044C%20%u043F%u043E%u043B%u043D%u044B%u0439%20%u043F%u0443%u0442%u044C%20%u043A%u043E%u043C%u0430%u043D%u0434%u044B%20Windows%0A%20%09if%20%28%21path%29%20path%20%3D%20%27/usr/bin/nohup%27%3B%20//%20%u0434%u043B%u044F%20Linux%20%u043D%u0443%u0436%u0435%u043D%20%u0442%u043E%u043B%u044C%u043A%u043E%20%u043F%u0430%u0440%u0430%u043C%u0435%u0442%u0440%3A%20%u0438%u043C%u044F%20%u043A%u043E%u043C%u0430%u043D%u0434%u044B%2C%20%u0441%u043A%u0440%u0438%u043F%u0442%u0430%0A%09var%20file%20%3D%20Services.dirsvc.get%28%27CurProcD%27%2C%20Ci.nsIFile%29%3B%0A%09file.initWithPath%28path%29%3B%0A%09if%28file.exists%28%29%29%20%7B%0A%09%09var%20process%20%3D%20Cc%5B%22@mozilla.org/process/util%3B1%22%5D.createInstance%28Ci.nsIProcess%29%3B%0A%09%09process.init%28file%29%3B%0A%09%09process.run%28false%2C%20args%2C%20args.length%29%3B%0A%09%7D%20else%20custombuttons.%20alertBox%20%28%22%u0424%u0430%u0439%u043B%20%u043D%u0435%20%u043D%u0430%u0439%u0434%u0435%u043D%22%2C%20path%29%3B%20//%20%u0421%u043E%u043E%u0431%u0449%u0435%u043D%u0438%u0435%20%u043E%u0431%20%u043E%u0448%u0438%u0431%u043A%u0435%0A%7D%3B%0A%0Awindow.beep%20%3D%20function%28%29%20%7B%0A%09if%20%28/linux/.test%28%20window.getPlatform%28%29%29%29%20%7B%20//%20%u0442%u0438%u043F%20%u0441%u0438%u0441%u0442%u0435%u043C%u044B%0A%09%09window.exec%28%27%27%2C%20%5B%27beep%27%5D%20%29%3B%20//%20%u043A%u043E%u043C%u0430%u043D%u0434%u0430%20Linux%0A%09%7D%20else%0A%09%09window.exec%28%27C%3A%5C%5Cwindows%5C%5Csystem32%5C%5Ccmd.exe%27%2C%20%5B%20%27/C%27%2C%20%27echo%27%2C%20String.fromCharCode%287%29%20%5D%20%29%3B%20//%20Windows%20beep%0A%7D%0A%0Awindow.Title%20%3D%20function%20%28type%29%20%7B%20//%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043E%u043A%20%28%u0431%u0435%u0437%20%u043E%u0431%u0440%u0435%u0437%u043A%u0438%2C%20%u0435%u0441%u043B%u0438%20type%20%u043D%u0435%20%u0443%u043A%u0430%u0437%u0430%u043D%29%2C%20%u0434%u043E%u043C%u0435%u043D%20%28type%20%3C0%29%0A%09var%20title%20%3D%20%28content.document.title%20%7C%7C%20gBrowser.mCurrentTab.label%29%3B%0A%09var%20host%20%3D%20%28/about%3A/.test%28gURLBar.value%29%29%20%3F%20//%20ReaderView%20%u0438%u043B%u0438%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0430%20about%3A%u2026%0A%09%09decodeURIComponent%28gURLBar.value%29.replace%28/%5E.*url%3D/%2C%27%27%29.replace%28/%5Ehttps%3F%3A%5C/%5C//%2C%27%27%29.replace%28/%5C/.*/%2C%27%27%29%20%3A%0A%09%09gBrowser.currentURI.host%3B%0A%09if%20%28/%5Efile%3A%5C/%5C//.test%28gBrowser.currentURI.spec%29%29%20host%20%3D%20%27%27%3B%20//%20%u043E%u0442%u043A%u0440%u044B%u0442%20%u043B%u043E%u043A%u0430%u043B%u044C%u043D%u044B%u0439%20%u0444%u0430%u0439%u043B%0A%09if%20%28%20%21type%20%29%20return%20title%3B%20//%20%u0437%u0430%u0433%u043E%u043B%u043E%u0432%u043E%u043A%0A%09if%20%28%20type%20%3E%200%20%29%20return%20title.replace%28/%5B%3A%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%27%20%27%29.replace%28/%5Cs+/g%2C%27%20%27%29.replace%28/%20%20/g%2C%27%20%27%29.substr%280%2C%20type%29.trim%28%29%3B%20//%20%u043E%u0433%u0440%u0430%u043D%u0438%u0447%u0438%u0442%u044C%20%u0434%u043B%u0438%u043D%u0443%20%u0438%u043C%u0435%u043D%u0438%0A%09if%20%28%20type%20%3C%200%20%29%20return%20host.replace%28/%5Ewww%5C./%2C%27%27%29.replace%28/%5Eru%5C./%2C%27%27%29.replace%28/%5Em%5C./%2C%27%27%29.replace%28/%5Eforum%5C./%2C%27%27%29.replace%28/%5Eclub%5C.dns/%2C%27dns%27%29%3B%0A%7D%3B%0A%0A//%20%u041A%u043E%u043D%u0432%u0435%u0440%u0442%u0438%u0440%u043E%u0432%u0430%u0442%u044C%20%u0442%u0435%u043A%u0441%u0442%20%u0432%20%u044E%u043D%u0438%u043A%u043E%u0434%0Awindow.convertFromUnicode%20%3D%20function%28charset%2C%20str%29%20%7B%0A%09var%20converter%20%3D%20Cc%5B%22@mozilla.org/intl/scriptableunicodeconverter%22%5D.createInstance%28Ci.nsIScriptableUnicodeConverter%29%3B%0A%09converter.charset%20%3D%20charset%3B%0A%09str%20%3D%20converter.ConvertFromUnicode%28str%29%3B%0A%09return%20str%20+%20converter.Finish%28%29%3B%0A%7D%3B%0A%0Awindow.getPlatform%28true%29%3B%20//%20%u043F%u0435%u0440%u0435%u043E%u043F%u0440%u0435%u0434%u0435%u043B%u0438%u0442%u044C%20%u0442%u0438%u043F%20%u0441%u0438%u0441%u0442%u0435%u043C%u044B%0A%0A//%20%u0421%u043E%u0445%u0440%u0430%u043D%u0438%u0442%u044C%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0443%5C%u0432%u044B%u0434%u0435%u043B%u0435%u043D%u043D%u044B%u0439%20%u0442%u0435%u043A%u0441%u0442%20Save%20snapshot%20to%20html%20%u043E%u0442%2001.12.2017%0Awindow.SaveSnapshot%20%3D%20function%20%28%29%20%7B%0Avar%20resolveURL%20%3D%20function%20%28url%2C%20base%29%20%7B%0A%09try%20%7B%0A%09%09var%20ioService%20%3D%20Components.classes%5B%27@mozilla.org/network/io-service%3B1%27%5D.getService%28Components.interfaces.nsIIOService%29%3B%0A%09%09var%20baseURI%20%3D%20ioService.newURI%28base%2C%20null%2C%20null%29%3B%0A%09%09var%20absURI%20%3D%20ioService.newURI%28url%2C%20null%2C%20baseURI%29%3B%0A%09%09return%20absURI.spec%3B%0A%09%7D%20catch%20%28e%29%20%7B%7D%0A%7D%3B%0Avar%20getSelWin%20%3D%20function%20%28w%29%20%7B%0A%09if%20%28w.getSelection%28%29.toString%28%29%29%20return%20w%3B%0A%09for%20%28var%20i%20%3D%200%2C%20f%2C%20r%3B%20f%20%3D%20w.frames%5Bi%5D%3B%20i++%29%20%7B%0A%09%09try%20%7B%20if%20%28r%20%3D%20getSelWin%28f%29%29%20return%20r%3B%20%7D%20catch%28e%29%20%7B%7D%0A%09%7D%0A%7D%3B%0Avar%20encodeImg%20%3D%20function%20%28src%2C%20obj%29%20%7B%0A%09var%20canvas%2C%20img%2C%20ret%20%3D%20src%3B%0A%09if%20%28/%5Ehttps%3F%3A%5C/%5C//.test%28src%29%29%20%7B%0A%09%09canvas%20%3D%20doc.createElement%28%27canvas%27%29%3B%0A%09%09if%20%28%21obj%20%7C%7C%20obj.nodeName.toLowerCase%28%29%20%21%3D%20%27img%27%29%20%7B%0A%09%09%09img%20%3D%20doc.createElement%28%27img%27%29%3B%0A%09%09%09img.src%20%3D%20src%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09img%20%3D%20obj%3B%0A%09%09%7D%3B%0A%09%09if%20%28img.complete%29%20try%7B%0A%09%09%09canvas.width%20%3D%20img.width%3B%0A%09%09%09canvas.height%20%3D%20img.height%3B%0A%09%09%09canvas.getContext%28%272d%27%29.drawImage%28img%2C%200%2C%200%29%3B%0A%09%09%09ret%20%3D%20canvas.toDataURL%28%28/%5C.jpe%3Fg/i.test%28src%29%20%3F%20%27image/jpeg%27%20%3A%20%27image/png%27%29%29%3B%0A%09%09%7D%20catch%20%28e%29%20%7B%7D%3B%0A%09%09if%20%28img%20%21%3D%20obj%29%20img.src%20%3D%20%27about%3Ablank%27%3B%0A%09%7D%3B%0A%09return%20ret%3B%0A%7D%3B%0Avar%20toSrc%20%3D%20function%20%28obj%29%20%7B%0A%09var%20strToSrc%20%3D%20function%20%28str%29%20%7B%0A%09%09var%20chr%2C%20ret%20%3D%20%27%27%2C%20i%20%3D%200%2C%20meta%20%3D%20%7B%27%5Cb%27%3A%20%27%5C%5Cb%27%2C%20%27%5Ct%27%3A%20%27%5C%5Ct%27%2C%20%27%5Cn%27%3A%20%27%5C%5Cn%27%2C%20%27%5Cf%27%3A%20%27%5C%5Cf%27%2C%20%27%5Cr%27%3A%20%27%5C%5Cr%27%2C%20%27%5Cx22%27%20%3A%20%27%5C%5C%5Cx22%27%2C%20%27%5C%5C%27%3A%20%27%5C%5C%5C%5C%27%7D%3B%0A%09%09while%20%28chr%20%3D%20str.charAt%28i++%29%29%20%7B%0A%09%09%09ret%20+%3D%20meta%5Bchr%5D%20%7C%7C%20chr%3B%0A%09%09%7D%3B%0A%09%09return%20%27%5Cx22%27%20+%20ret%20+%20%27%5Cx22%27%3B%0A%09%7D%2C%0A%09arrToSrc%20%3D%20function%20%28arr%29%20%7B%0A%09%09var%20ret%20%3D%20%5B%5D%3B%0A%09%09for%20%28var%20i%20%3D%200%3B%20i%20%3C%20arr.length%3B%20i++%29%20%7B%0A%09%09%09ret%5Bi%5D%20%3D%20toSrc%28arr%5Bi%5D%29%20%7C%7C%20%27null%27%3B%0A%09%09%7D%3B%0A%09%09return%20%27%5B%27%20+%20ret.join%28%27%2C%27%29%20+%20%27%5D%27%3B%0A%09%7D%2C%0A%09objToSrc%20%3D%20function%20%28obj%29%20%7B%0A%09%09var%20val%2C%20ret%20%3D%20%5B%5D%3B%0A%09%09for%20%28var%20prop%20in%20obj%29%20%7B%0A%09%09%09if%20%28obj.hasOwnProperty%28prop%29%20%26%26%20%28val%20%3D%20toSrc%28obj%5Bprop%5D%29%29%29%20ret.push%28strToSrc%28prop%29%20+%20%27%3A%20%27%20+%20val%29%3B%0A%09%09%7D%3B%0A%09%09return%20%27%7B%27%20+%20ret.join%28%27%2C%27%29%20+%20%27%7D%27%3B%0A%09%7D%3B%0A%09switch%20%28Object.prototype.toString.call%28obj%29.slice%288%2C%20-1%29%29%20%7B%0A%09%09case%20%27Array%27%3A%20return%20arrToSrc%28obj%29%3B%0A%09%09case%20%27Boolean%27%3A%0A%09%09case%20%27Function%27%3A%0A%09%09case%20%27RegExp%27%3A%20return%20obj.toString%28%29%3B%0A%09%09case%20%27Date%27%3A%20return%20%27new%20Date%28%27%20+%20obj.getTime%28%29%20+%20%27%29%27%3B%0A%09%09case%20%27Math%27%3A%20return%20%27Math%27%3B%0A%09%09case%20%27Number%27%3A%20return%20isFinite%28obj%29%20%3F%20String%28obj%29%20%3A%20%27null%27%3B%0A%09%09case%20%27Object%27%3A%20return%20objToSrc%28obj%29%3B%0A%09%09case%20%27String%27%3A%20return%20strToSrc%28obj%29%3B%0A%09%09default%3A%20return%20obj%20%3F%20%28obj.nodeType%20%3D%3D%201%20%26%26%20obj.id%20%3F%20%27document.getElementById%28%27%20+%20strToSrc%28obj.id%29%20+%20%27%29%27%20%3A%20%27%7B%7D%27%29%20%3A%20%27null%27%3B%0A%09%7D%0A%7D%3B%0Avar%20mainWin%20%3D%20document.commandDispatcher.focusedWindow.top%20%3D%3D%20content%20%3F%20document.commandDispatcher.focusedWindow%20%3A%20content%0Avar%20selWin%20%3D%20getSelWin%28mainWin%29%2C%20win%20%3D%20selWin%20%7C%7C%20mainWin%2C%20doc%20%3D%20win.document%2C%20loc%20%3D%20win.location%3B%0Avar%20ele%2C%20pEle%2C%20clone%2C%20reUrl%20%3D%20/%28url%5C%28%5Cx22%29%28.+%3F%29%28%5Cx22%5C%29%29/g%3B%0Aif%20%28selWin%29%20%7B%0A%09var%20rng%20%3D%20win.getSelection%28%29.getRangeAt%280%29%3B%0A%09pEle%20%3D%20rng.commonAncestorContainer%3B%0A%09ele%20%3D%20rng.cloneContents%28%29%3B%0A%09%7D%20else%20%7B%0A%09pEle%20%3D%20doc.documentElement%3B%0A%09ele%20%3D%20%28doc.body%20%7C%7C%20doc.getElementsByTagName%28%27body%27%29%5B0%5D%29.cloneNode%28true%29%3B%0A%7D%3B%0Awhile%20%28pEle%29%20%7B%0A%09if%20%28pEle.nodeType%20%3D%3D%201%29%20%7B%0A%09%09clone%20%3D%20pEle.cloneNode%28false%29%3B%0A%09%09clone.appendChild%28ele%29%3B%0A%09%09ele%20%3D%20clone%3B%0A%09%7D%3B%0A%09pEle%20%3D%20pEle.parentNode%0A%7D%3B%0Avar%20sel%20%3D%20doc.createElement%28%27div%27%29%3B%0Asel.appendChild%28ele%29%3B%0Afor%20%28var%20el%2C%20all%20%3D%20sel.getElementsByTagName%28%27*%27%29%2C%20i%20%3D%20all.length%3B%20i--%3B%29%20%7B%0A%09el%20%3D%20all%5Bi%5D%3B%0A%09if%20%28el.style%20%26%26%20el.style.backgroundImage%29%20el.style.backgroundImage%20%3D%20el.style.backgroundImage.replace%28reUrl%2C%20function%20%28a%2C%20prev%2C%20url%2C%20next%29%20%7B%0A%09%09if%20%28%21/%5E%5Ba-z%5D+%3A/.test%28url%29%29%20url%20%3D%20resolveURL%28url%2C%20loc.href%29%3B%0A%09%09return%20prev%20+%20encodeImg%28url%29%20+%20next%3B%0A%09%7D%29%3B%0A%09switch%20%28el.nodeName.toLowerCase%28%29%29%20%7B%0A%09%09case%20%27link%27%3A%0A%09%09case%20%27style%27%3A%0A%09%09case%20%27script%27%3A%20el.parentNode.removeChild%28el%29%3B%20break%3B%0A%09%09case%20%27a%27%3A%0A%09%09case%20%27area%27%3A%20if%20%28el.hasAttribute%28%27href%27%29%20%26%26%20el.getAttribute%28%27href%27%29.charAt%280%29%20%21%3D%20%27%23%27%29%20el.href%20%3D%20el.href%3B%20break%3B%0A%09%09case%20%27img%27%3A%0A%09%09case%20%27input%27%3A%20if%20%28el.hasAttribute%28%27src%27%29%29%20el.src%20%3D%20encodeImg%28el.src%2C%20el%29%3B%20break%3B%0A%09%09case%20%27audio%27%3A%0A%09%09case%20%27video%27%3A%0A%09%09case%20%27embed%27%3A%0A%09%09case%20%27frame%27%3A%0A%09%09case%20%27iframe%27%3A%20if%20%28el.hasAttribute%28%27src%27%29%29%20el.src%20%3D%20el.src%3B%20break%3B%0A%09%09case%20%27object%27%3A%20if%20%28el.hasAttribute%28%27data%27%29%29%20el.data%20%3D%20el.data%3B%20break%3B%0A%09%09case%20%27form%27%3A%20if%20%28el.hasAttribute%28%27action%27%29%29%20el.action%20%3D%20el.action%3B%20break%3B%0A%09%7D%0A%7D%3B%0Avar%20head%20%3D%20ele.insertBefore%28doc.createElement%28%27head%27%29%2C%20ele.firstChild%29%3B%0Avar%20meta%20%3D%20doc.createElement%28%27meta%27%29%3B%0Ameta.httpEquiv%20%3D%20%27content-type%27%3B%0Ameta.content%20%3D%20%27text/html%3B%20charset%3Dutf-8%27%3B%0Ahead.appendChild%28meta%29%3B%0Avar%20title%20%3D%20doc.getElementsByTagName%28%27title%27%29%5B0%5D%3B%0Aif%20%28title%29%20head.appendChild%28title.cloneNode%28true%29%29%3B%0Ahead.copyScript%20%3D%20function%20%28unsafeWin%29%20%7B%0A%09if%20%28%27%24%27%20in%20unsafeWin%29%20return%3B%0A%09var%20f%20%3D%20doc.createElement%28%27iframe%27%29%3B%0A%09f.src%20%3D%20%27about%3Ablank%27%3B%0A%09f.setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bleft%3A0%3Btop%3A0%3Bvisibility%3Ahidden%3Bwidth%3A0%3Bheight%3A0%3B%27%29%3B%0A%09doc.documentElement.appendChild%28f%29%3B%0A%09var%20str%2C%20script%20%3D%20doc.createElement%28%27script%27%29%3B%0A%09script.type%20%3D%20%27text/javascript%27%3B%0A%09for%20%28var%20name%20in%20unsafeWin%29%20%7B%0A%09%09if%20%28name%20in%20f.contentWindow%20%7C%7C%20%21/%5E%5Ba-zA-Z_%24%5D%5B0-9a-zA-Z_%24%5D*%24/.test%28name%29%29%20continue%3B%0A%09%09try%20%7B%0A%09%09%09str%20%3D%20toSrc%28unsafeWin%5Bname%5D%29%3B%0A%09%09%09if%20%28%21/%5C%7B%5Cs*%5C%5Bnative%20code%5C%5D%5Cs*%5C%7D/.test%28str%29%29%20%7B%0A%09%09%09%09script.appendChild%28doc.createTextNode%28%27var%20%27%20+%20name%20+%20%27%20%3D%20%27%20+%20str.replace%28/%3C%5C/%28script%3E%29/ig%2C%20%27%3C%5C%5C/%241%27%29%20+%20%27%3B%5Cn%27%29%29%3B%0A%09%09%09%7D%0A%09%09%7D%20catch%20%28e%29%20%7B%7D%3B%0A%09%7D%3B%0A%09f.parentNode.removeChild%28f%29%3B%0A%09if%20%28script.childNodes.length%29%20this.nextSibling.appendChild%28script%29%3B%0A%7D%3B%0Ahead.copyScript%28win.wrappedJSObject%20%7C%7C%20win%29%3B%0Ahead.copyStyle%20%3D%20function%20%28s%29%20%7B%0A%09if%20%28%21s%29%20return%3B%0A%09var%20style%20%3D%20doc.createElement%28%27style%27%29%3B%0A%09style.type%20%3D%20%27text/css%27%3B%0A%09if%20%28s.media%20%26%26%20s.media.mediaText%29%20style.media%20%3D%20s.media.mediaText%3B%0A%09try%20%7B%0A%09%09for%20%28var%20i%20%3D%200%2C%20rule%3B%20rule%20%3D%20s.cssRules%5Bi%5D%3B%20i++%29%20%7B%0A%09%09%09if%20%28rule.type%20%21%3D%203%29%20%7B%0A%09%09%09%09if%28%28%21rule.selectorText%20%7C%7C%20rule.selectorText.indexOf%28%27%3A%27%29%20%21%3D%20-1%29%20%7C%7C%20%28%21sel.querySelector%20%7C%7C%20sel.querySelector%28rule.selectorText%29%29%29%20%7B%0A%09%09%09%09%09var%20css%20%3D%20%21rule.cssText%20%3F%20%27%27%20%3A%20rule.cssText.replace%28reUrl%2C%20function%20%28a%2C%20prev%2C%20url%2C%20next%29%20%7B%0A%09%09%09%09%09%09if%20%28%21/%5E%5Ba-z%5D+%3A/.test%28url%29%29%20url%20%3D%20resolveURL%28url%2C%20s.href%20%7C%7C%20loc.href%29%3B%0A%09%09%09%09%09%09if%28rule.type%20%3D%3D%201%20%26%26%20rule.style%20%26%26%20rule.style.backgroundImage%29%20url%20%3D%20encodeImg%28url%29%3B%0A%09%09%09%09%09%09return%20prev%20+%20url%20+%20next%3B%0A%09%09%09%09%09%7D%29%3B%0A%09%09%09%09%09style.appendChild%28doc.createTextNode%28css%20+%20%27%5Cn%27%29%29%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09this.copyStyle%28rule.styleSheet%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%20catch%28e%29%20%7B%0A%09%09if%20%28s.ownerNode%29%20style%20%3D%20s.ownerNode.cloneNode%28false%29%3B%0A%09%7D%3B%0A%09this.appendChild%28style%29%3B%0A%7D%3B%0Avar%20sheets%20%3D%20doc.styleSheets%3B%0Afor%20%28var%20j%20%3D%200%3B%20j%20%3C%20sheets.length%3B%20j++%29%20head.copyStyle%28sheets%5Bj%5D%29%3B%0Ahead.appendChild%28doc.createTextNode%28%27%5Cn%27%29%29%3B%0Avar%20doctype%20%3D%20%27%27%2C%20dt%20%3D%20doc.doctype%3B%0Aif%20%28dt%20%26%26%20dt.name%29%20%7B%0A%09doctype%20+%3D%20%27%3C%21DOCTYPE%20%27%20+%20dt.name%3B%0A%09if%20%28dt.publicId%29%20doctype%20+%3D%20%27%20PUBLIC%20%5Cx22%27%20+%20dt.publicId%20+%20%27%5Cx22%27%3B%0A%09if%20%28dt.systemId%29%20doctype%20+%3D%20%27%20%5Cx22%27%20+%20dt.systemId%20+%20%27%5Cx22%27%3B%0A%09doctype%20+%3D%20%27%3E%5Cn%27%3B%0A%7D%3B%0A%0A%09var%20title%20%3D%20selWin%20%3F%20win.getSelection%28%29.toString%28%29%20%3A%20%28title%20%26%26%20title.text%20%3F%20decodeURIComponent%28title.text%29%20%3A%20loc.pathname.split%28%27/%27%29.pop%28%29%29%3B%0A%09var%20fileName%20%3D%20title.replace%28/%5B%3A%5C%5C%5C/%3C%3E%3F*%7C%22%5D+/g%2C%27%20%27%29.replace%28/%5Cs+/g%2C%27%20%27%29.replace%28/%5E%5Cs+%7C%5Cs+%24/g%2C%27%27%29.replace%28/%20%20/g%2C%27%20%27%29.replace%28/pic%20/%2C%27%27%29.slice%280%2C100%29%20+%27_%27+%20window.dateout%283%29%3B%0Aif%28%21/%5C.html%3F%24/.test%28fileName%29%29fileName%20+%3D%20%27.html%27%3B%0A%0A%09var%20savedir%20%3D%20cbu.getPrefs%28%27browser.download.dir%27%29%20+%27/_Web/%27%3B%0A%09if%20%28/%5Etvzvezda%7C%5Ezvezdaweekly%7C%5Eweacom/.test%28window.Title%28-1%29%29%29%20//%20%u0442%u0435%u043C%u044B%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%20%u043F%u043E%20%u043F%u0430%u043F%u043A%u0430%u043C%0A%09%09%09savedir%20%3D%20savedir%20+%20%27_%u041D%u043E%u0432%u043E%u0441%u0442%u0438/%u2605%u202F%27+%20window.Title%28-1%29%20//%20%u043F%u043E%u0441%u043B%u0435%20%u0437%u0432%u0451%u0437%u0434%u043E%u0447%u043A%u0438%20%u043D%u0435%u0441%u0442%u0430%u043D%u0434%u0430%u0440%u0442%u043D%u044B%u0439%20%u043F%u0440%u043E%u0431%u0435%u043B%0A%09else%20savedir%20%3D%20savedir%20+%20%27%u2605%u202F%27+%20decodeURIComponent%28window.Title%28-1%29%29%3B%0A%0Avar%20text%20%3D%20doctype%20+%20sel.innerHTML%20+%20%27%5Cn%3Ca%20href%3D%27%20+%20%28loc.protocol%20%21%3D%20%27data%3A%27%20%3F%20loc.href%20%3A%20%27data%3Auri%27%29%20+%20%27%3E%3Csmall%3E%3Cblockquote%3EThis%20document%20saved%20url...%20%27+%20window.dateout%281%29%20+%27%3C/blockquote%3E%3C/small%3E%3C/a%3E%27%3B%0Avar%20uc%20%3D%20Components.classes%5B%27@mozilla.org/intl/scriptableunicodeconverter%27%5D.createInstance%28Components.interfaces.nsIScriptableUnicodeConverter%29%3B%0A%09uc.charset%20%3D%20%27utf-8%27%3B%0A%09text%20%3D%20uc.ConvertFromUnicode%28text%29%3B%0Avar%20file%20%3D%20Cc%5B%22@mozilla.org/file/local%3B1%22%5D.createInstance%28Ci.nsIFile%29%3B%0A%09file.initWithPath%28savedir%29%3B%0A%09if%20%28%20%21file.exists%28%29%20%7C%7C%20%21file.isDirectory%28%29%20%29%20file.create%28Ci.nsIFile.DIRECTORY_TYPE%2C%200777%29%3B%20//%20%u0441%u043E%u0437%u0434%u0430%u0442%u044C%20%u043F%u0430%u043F%u043A%u0443%2C%20%u0435%u0441%u043B%u0438%20%u043D%u0435%20%u0441%u0443%u0449%u0435%u0441%u0442%u0432%u0443%u0435%u0442%u2026%0A%09file.append%28fileName%29%3B%0A%09cbu.writeFile%28file.path%2C%20text%29%3B%0Awindow.statusTextField%20%28%27%uD83D%uDDAB%20%27+%20title.slice%280%2C150%29%2C%207000%29%3B%0A%09window.Warning%28%29%3B%0A%09window.beep%28%29%3B%0A%7D%3B%0A%0Awindow.SaveSnapshot%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%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E
Отредактировано Dobrov (07-11-2018 03:00:36)
Отсутствует
Я, например, прямо в Notepad++ omni.ja подправил, даже задумываться
ни о чём не надо, поскольку количество символов не меняется.
Это обязательное условие, что при правке omni.ja нужно следить за тем, чтоб общее количество символов осталось, как в оригинале?
А если так не получается и количество символов будет другим, то к каким последствиям это приведет?
Отсутствует
я создаю textarea
Создать textarea надо просить у HTML документа.
Это обязательное условие, что при правке omni.ja нужно следить за тем, чтоб общее количество символов осталось, как в оригинале?
А если так не получается и количество символов будет другим, то к каким последствиям это приведет?
Если править omni.ja прямо в Notepad++, то да, обязательное.
Причём, общее количество символов не просто во всём 18МБ-ном файле,
но в пределах отдельной зип-сущности. То есть нельзя в одном вложенном
файле уменьшить, а в другом столько же добавить.
Иначе говоря, это подходит для каких-то простых операций.
Если есть затруднения, да и вообще, — лучше перепаковать
архиватором заново, безо всяких ограничений. И не забываем
вычищать папку startupCache в локальном каталоге профиля.
А последствия.. Ну к чему может привести битый файл?
Появление крашрепортера, схлопывание программы на старте,
иная какая-нибудь прочая неприятность. Ничего хорошего.
Отсутствует
rbfyec пишетя создаю textarea
Создать textarea надо просить у HTML документа.
Ну я сделал content.document.createElement ('textarea') - так декодируется.
А в каких случаях нужно обращаться именно к HTML документу? Если я скажем хочу просто создать див или спан и вставить его в страницу - как надо сделать?
Отредактировано rbfyec (08-11-2018 14:57:04)
Отсутствует
Dumby
Большое спасибо за хорошее разъяснение.
Я сначала открываю omni.ja в винраре, а уж оттуда открываю файлы в акелпаде.
Значит, насколько понял, могу не заботиться о количестве символов.
А метод сжатия, установленный в винраре имеет значение? Я ставлю ZIP без сжатия - это нормально или лучше все же сжимать omni.ja ?
Отредактировано usalex (08-11-2018 02:55:27)
Отсутствует
А что именно в моём коде неправильно
Ну, например, «1_str = txt.value;»
В JavaScript идентификаторы выступают
в качестве названий переменных и функций, а также меток некоторых циклов.
Правила формирования допустимых идентификаторов совпадают с правилами
Java и многих других языков программирования. Первым символом должна быть
буква, символ подчеркивания (_) или знак доллара ($). Последующие символы
могут быть любой буквой, цифрой, символом подчеркивания или знаком доллара.
(Цифра не может быть первым символом, т. к. тогда интерпретатору труднее
отличать идентификаторы от чисел.)
что там надо изменить?
Что надо изменить это тебе виднее.
Я просто предложил для создания textarea использовать HTML документ.
Не знаю как проще объяснить. Может запусти пример, посмотри на alert.
var str = "a b'c"; var test = func => { var doc, arr = [ "CODE:\t" + func.toString().slice(6) ]; try { doc = func(); arr.push("DOC: \t" + doc); } catch(ex) { arr.push("ERR: \t" + ex); } if (doc) { try { var textarea = doc.createElement("textarea"); textarea.innerHTML = str; var result = textarea.value; arr.push("RES: \t" + result); } catch(ex) { arr.push("ERR: \t" + ex); } } return arr.join("\n"); } var funcs = [ () => document, () => new DOMParser().parseFromString("", "text/html"), () => Services.appShell.hiddenDOMWindow.document, () => document.implementation.createHTMLDocument("") ]; alert(funcs.map(test).join("\n\n"));
Я ставлю ZIP без сжатия - это нормально или лучше все же сжимать
Оригинальный omni.ja ведь запакован без сжатия, значит нормально.
Сжатый тоже, наверно, будет работать, но зачем от добра добра искать.
Отсутствует
Yeesha пишетBrowser.AddWebTab() должно работать.
Не-а.
Dumby пишетМожно попробовать сделать как здесь,
И «Обратно совместимое», и «Обратно несовместимое» — работают.
Ох, но кнопок где это встречается много...
Буду потихоньку переделывать.
СпасибоP.S. Ещё не работает «рестарт». Мне он не нужен, просто проверял что работает, а что нет.
Видимо и правда изгадили всё подряд.
подобной кнопке все заработало... Но, не получается запустить ПКМ, собственно с самим меню
// Настройка функций кликов мыши ................................ this.onclick =e=> { if ( e.button == 0 ) gBrowser.selectedTab = gBrowser.addTrustedTab("about:blank"); if ( e.button == 1 ) { // запомнить текст из буфера обмена и скопировать текст на странице var clip = gClipboard.read(); window.content.focus(); goDoCommand("cmd_copy"); gBrowser.selectedTab = gBrowser.addTrustedTab('about:blank?filter=' + gClipboard.read()); clip && gClipboard.write(clip); // вернуть текст в буфер обмена } if ( e.button == 2 && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey ) { e.preventDefault(); menu.showPopup(this, -1, -1, "popup", "bottomleft", "topleft"); } }; this.oncontextmenu =e=> { e.button && !e.ctrlKey && e.preventDefault() }; // Создать меню для кнопки ................................ var array = [ [ 'about:about', 'about:about' ], [ 'about:plugins', 'about:plugins' ], [ 'about:telemetry', 'about:telemetry' ], [ 'about:newtab', 'about:newtab' ], [ 'about:preferences', 'about:preferences' ], [ 'about:cache', 'about:cache' ], [ 'about:home', 'about:home' ], [ 'about:sessionrestore', 'about:sessionrestore' ], [ 'about:permissions', 'about:permissions' ], [ 'about:support', 'about:support' ], [ 'about:memory', 'about:memory' ], [ 'bookmarksPanel', 'chrome://browser/content/bookmarks/bookmarksPanel.xul' ] ]; var menu = self.appendChild(document.createElement("menupopup")); array.forEach(m=> { var mItem = menu.appendChild(document.createElement("menuitem")); mItem.setAttribute("label", m[0]); mItem.onclick =()=> gBrowser.selectedTab = gBrowser.addTrustedTab(m[1]); }); menu.setAttribute("onclick", "event.stopPropagation()"); // Подсказка кнопки ................................ this.tooltipText = "Л: Открыть 'about:config'\nС: Открыть 'about:config' с настройкой ( выделенной или из буфера )\nП: Показать все about:";
Отсутствует
Привет всем.
Давно не интересовался СВ - сижу пока на FF58.
Может кто-нибудь подведет итог: можно ли запустить СВ на FF63 и что нужно для этого сделать.
И какие кнопки еще работают на 63 или в идеале выложит ссылку на HTML файл с сохраненными кнопками.
А то в теме уже столько вариантов СВ и кнопок и файлов config-prefs.js - config.js, что я уже запутался.
Отсутствует
Может кто-нибудь подведет итог: можно ли запустить СВ на FF63 и что нужно для этого сделать.
Сделать всё как тут сказано: https://forum.mozilla-russia.org/viewto … 07#p762507
И какие кнопки еще работают на 63 или в идеале выложит ссылку на HTML файл с сохраненными кнопками.
Вряд ли все проверены. У большинства конкретный набор же.
Выложить бы можно, да только у меня они все под меня любимого и заточены.
Если что-то конкретное интересует — попробую подсказать.
На форуме
xrun1
Давай свой omni.ja - СВ встанет и кнопки почти все заработают, а самое крутое расширение упадёт(Long Left Click)
https://vitaliyvstyle.github.io/extensions
Отредактировано drage2 (12-11-2018 22:05:36)
Отсутствует
drage2
У меня и так все ссылки и закладки открываются в новой вкладке без всяких танцев с бубном расширений, только настройки prefs.js. Исключения есть, например главная страница яндекса или результаты поиска google, но и там могу ПКМ потянуть ссылку (Foxy Gestures).
У меня вариант, предложенный Coroner, не сработал.
После обновления с 59 на 60 CB с вариантом config.js отвалился. И никакие версии CB или конфига проблему не решили. Win10 x64 1803, x64 установка штатная в папку c:\Program Files\
Отредактировано xrun1 (13-11-2018 00:02:33)
Отсутствует
У меня и так все ссылки и закладки открываются в новой вкладке
А история тоже в новой?
config.js отвалился.
Omni.ja править надо! Наше дело предложить....
Отсутствует
А история тоже в новой?
Нет. Но я историей не пользуюсь, хотя хранится года за 3...
Omni.ja править надо!
Для меня без вариантов.
Отсутствует
xrun1
https://www.upload.ee/files/9185100/___ … _.rar.html
Для 63.0 - разрядность не имеет значения.CB.xpi - на всякий случай(если своя не катит, то сначала свою удалить)
Да, обновления не будет никогда, а то упадёт все.
Отсутствует
drage2
Спасибо, посмотрел. С config.js испробовал такие, список ниже под спойлером (после _мой комментарий). Не сложилось. Сейчас использую последний в списке.
Отредактировано xrun1 (13-11-2018 16:43:04)
Отсутствует
xrun1 https://forum.mozilla-russia.org/viewto … 95#p760895 это вроде рабочий config.js 60+
Upd: странно но у меня работает на 63...
Отредактировано func4ptch4 (14-11-2018 19:47:43)
Отсутствует
func4ptch4
Спасибо, но и этот тоже у меня не сработал тогда. Я за темой слежу, все обновления от Dumby пробовал. Да ладно, пока работает вариант omni.ja, а что будет дальше в 65-й - ещё дожить надо.
P.S. В принципе, я почти готов пользоваться без кнопок, но это будет менее комфортно лично для меня.
Отсутствует
А толку от этих новых конфигов, если на новых билдах фаерфокса все равно большинство кнопок не работает?
Пока исправят кнопки, выйдет новый ff и опять всё отвалится. Мартышкин труд, блин.
Отсутствует