А с какой версией он совместим?
Отредактировано Indomito (04-06-2015 16:54:47)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Задачка появилась
Имеем такой элемент на странице:
Нужно при загрузке страницы на определённом домене, а еще лучше конкретную страницу, парсить страницу на содержание подчёркнутого на скриншоте элемента и обрезать эту часть. Желательно бы иметь возможность добавлять несколько страниц для обработки и возможность добавления элементов для поиска и обрезки.
Думаю для мастеров несложно будет.
Отсутствует
Отсутствует
okkamas_knife
Код отлично работает, но теперь надо его прикрутить чтобы срабатывал автоматически при загрузке страницы.
var tags=window.content.document.getElementsByTagName('span'); for (var i = 0; i < tags.length ; i++){ tags[i].innerHTML=tags[i].innerHTML.replace(/.*\s\:\:\s/g,''); }
Отсутствует
okkamas_knife
В общем не работает основная функция, не обрезает ничего:
addEventListener( "DOMContentLoaded", function(e) { var doc = window.content.document; var win = doc.defaultView; custombuttons.alertSlide("домен", doc.location.host); if(win != win.top) // Ignore frames return; if (doc.location.host == "www.inoreader.com") { var tags=doc.getElementsByTagName('span'); for (var i = 0; i < tags.length ; i++){ tags[i].innerHTML=tags[i].innerHTML.replace(/.*\s\:\:\s/g,'');} }; }, true, document.getElementById("appcontent") );
Отсутствует
без загрузки счетчиков типа liveinternet
Есть такая кнопка. Adblock Plus называется. + подписка АнтиСчётчик.
Отсутствует
okkamas_knife
Оказывается код срабатывал правильно, просто содержимое страницы подгружается уже после загрузки вкладки, т.е. на момент запуска кода, там не было нужных элементов, поэтому добавил таймаут и код заработал:
addEventListener( "DOMContentLoaded", function(e) { var doc = window.content.document; var win = doc.defaultView; if(win != win.top) // Ignore frames return; if (doc.location.host == "www.inoreader.com") { custombuttons.alertSlide("домен", doc.location.host); setTimeout (function() { var tags=doc.getElementsByTagName('span'); for (var i = 0; i < tags.length ; i++){ tags[i].innerHTML=tags[i].innerHTML.replace(/.*\s\:\:\s/g,''); }; },2000); }; }, true, document.getElementById("appcontent") );
Отсутствует
да ладно!
вон даже в старом куча ругани на readFromClipboard
используй
var clptext = custombuttonsUtils. gClipboard. read ();
спасибо, а то я тебя даже не поблагодарил... в старом варианте были страшные глюки, а теперь всё работает на ура
this.checkClipboard = function() { // var clipStr = readFromClipboard(); var clipStr = custombuttonsUtils. gClipboard. read (); if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1) this.storeString(clipStr); };
СПАСИБО!
P.S. Да, кстати, я перерыл весь chrome://custombuttons/content/cb2api.js но не смог найти custombuttonsUtils. gClipboard. read () может покажешь этот фрагмент?
Отредактировано Indomito (05-06-2015 13:14:11)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
okkamas_knife
В общем как-то так завелось:
// Отслеживать переключение, загрузку, изменение текущей вкладки var main = { // если текущая страница изменился( загрузка, переход по истории, тп.) .... onStateChange: function(aWebProgress, aRequest, aFlag, aStatus) { if ( !aWebProgress.DOMWindow.document.location.protocol.startsWith("http") ) return; // стоп если внутренние страницы FF // если уже загруженная текущая страница if ( aFlag & Ci.nsIWebProgressListener.STATE_STOP ) { // aWebProgress.DOMWindow.close() } }, // если текущий адрес изменился .... onLocationChange: function(aWebProgress, aRequest, aURI) { if ( aRequest ) return; // стоп если это не переключение на другую вкладку if ( !aURI.spec.startsWith("http") ) return; // стоп если внутренние страницы FF if ( aWebProgress.DOMWindow.document.readyState !== 'complete' ) return; // стоп если текущая страница еще не загружена // запуск кода или функции при переключение на другую вкладку if (window.content.document.location.host == "www.inoreader.com") { setTimeout (function() { var tags=window.content.document.getElementsByTagName('span'); for (var i = 0; i < tags.length ; i++){ tags[i].innerHTML=tags[i].innerHTML.replace(/.*\s\:\:\s/g,''); }; },2500); }; } }; gBrowser.addProgressListener( main ); addDestructor(function() { gBrowser.removeProgressListener( main ) });
Отсутствует
Indomito
extensions\custombuttons@xsms.org\chrome\custombuttonszzzz\content\custombuttons\overlay.js
ищи по gClipboard
это адрес на компе или в интернете.... в интернете не нашёл...
Ну я и балда - это же профиль мозиллы
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
в принципе да. вроде было какоето событие реагирующее на изменение DOM но тут я не помощник
Ну ладно, может кто еще подскажет. Вообще же я могу просто переключиться на другую вкладку и обратно, тогда код снова срабатывает
Отсутствует
okkamas_knife
В общем остановился на варианте с дивом, никакой автоматики
addEventListener( "DOMContentLoaded", function(e) { var doc = window.content.document; if (doc.location.host == "www.inoreader.com") { setTimeout (function() { var begin = 'Очистить'; var body = doc.body || doc.documentElement; body.insertBefore(createDiv(begin), body.firstChild); function createDiv(html) { var div = doc.createElementNS("http://www.w3.org/1999/xhtml", "div"); div.setAttribute("id", "pagecleaner"); div.style.visibility="visible"; div.style.position="fixed"; div.style.left="450px"; div.style.top="0px"; div.style.width="54px"; div.style.height="15px"; div.style.padding="13px"; div.style.paddingTop="9px"; div.style.paddingLeft="13px"; div.style.margin="0px"; div.style.color="rgb(191, 191, 191)"; div.style.textShadow="rgba(0, 0, 0, 0.9) -1px 1px 0px"; div.style.fontWeight="400"; div.style.fontFamily="Segoe UI"; div.style.fontSize="15px"; div.style.backgroundColor="transparent"; div.style.zIndex="120"; div.innerHTML = html; return div; } var clnr=window.content.document.getElementById("pagecleaner") clnr.addEventListener("mouseout", function(e) { var tags=doc.getElementsByTagName('span'); for (var i = 0; i < tags.length ; i++){ tags[i].innerHTML=tags[i].innerHTML.replace(/.*\s\:\:\s/g,''); } }, false, content); },800); }; }, true, document.getElementById("appcontent") );
Отредактировано Kamui (06-06-2015 09:48:14)
Отсутствует
в профиле
ой!
там вместо custombuttonszzzz должен быть custombuttons.jar конечно же..
не страшно....я это сразу понял, т.е. что это опечатка
А разве в chrome://custombuttons/content/cb2api.js её не должно быть?
Отредактировано Indomito (07-06-2015 00:35:23)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
F10
window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindowUtils).sendKeyEvent("keypress",0x79,0,0);
Отсутствует
turbot, спасибо. А возможно, чтобы по нажатию кнопки срабатывал системный PrintScreen, или только внутри FF?
можно запустить программу, можно сделать что бы срабатывал и системный PrintScreen.
Но что ты именно хочешь то?
Да, проще написать скрипт скажем на AHK и запустить его как внешняя программа, а уж в скрипте на АНК можно сделать что угодно.
Пример кнопки
/*Initialization Code*/ //Автор Indomito ver 6.2 bild of 07.06.2015 //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // Блок инициализации глоб. переменных и функций // срок существования - один сеанс почтовика //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ //*********Begin section descriptions of variables********* //Глобальные переменные на один сеанс почтовика window.arycb_BBCodeClipboardStrings = this.clipboardStrings = []; // Массив буфера обмена window.MaxClipboardEntries = 16 //*********End section descriptions of variables********* //*********Begin section descriptions of functions********* //Функции которые вызываются из разных кнопок //Запуск внешней программы ExecuteExternalApps = function (path, args) { var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); file.initWithPath(path); if(file.exists()) { var process = Components.classes["@mozilla.org/process/util;1"] .createInstance(Components.interfaces.nsIProcess); process.init(file); process.run(false, args, args.length); } else custombuttons. alertBox ("Файл не найден", path); }; // ------------------------------------------------------- // Функция fHLD_Get_ListClipboardPrim // получить список сохранёного буфера обмена fnHLD_Get_ListClipboardPrim = function (){ var cs = arycb_BBCodeClipboardStrings; return (cs.slice(0)); }; //*********End section descriptions the functions********* //++++++++++++++++++END DEF+++++++++++++++++++++++++++++++++++ //Список сохранёного буфера обмена //Не вызываем это, обработка по таймеру или по событию ЛКМ //-----Обработчики буфера обмена this.MAX_ENTRIES = window.MaxClipboardEntries //Максимальное число записей window.MaxClipboardEntries this.CHECK_INTERVAL = 1000; //Время опроса буфера 1000 миллисекунд this.type = "menu"; this.orient = "horizontal"; this._menupopup = this.appendChild(document.createElement("menupopup")); this._menupopup.setAttribute("oncommand", "this.parentNode.handleCommand(event.target);"); this.checkClipboard = function() { // var clipStr = readFromClipboard(); var clipStr = custombuttonsUtils. gClipboard. read (); if(clipStr && this.clipboardStrings.indexOf(clipStr) == -1) this.storeString(clipStr); }; this.storeString = function(str) { var cs = this.clipboardStrings; cs.push(str); while(cs.length > this.MAX_ENTRIES) cs.shift(); var mi = document.createElement("menuitem"); mi.setAttribute("label", str); this._menupopup.appendChild(mi); while(this._menupopup.childNodes.length > this.MAX_ENTRIES) this._menupopup.removeChild(this._menupopup.firstChild); }; this.handleCommand = function(mi) { var indx = Array.indexOf(mi.parentNode.childNodes, mi); if(indx != -1) this.insertText(this.clipboardStrings[indx]); }; this.insertText = function(str) { var cmd = "cmd_insertText"; var controller = document.commandDispatcher.getControllerForCommand(cmd); if(controller && controller.isCommandEnabled(cmd)) { controller = controller.QueryInterface(Components.interfaces.nsICommandController); var params = Components.classes["@mozilla.org/embedcomp/command-params;1"] .createInstance(Components.interfaces.nsICommandParams); params.setStringValue("state_data", str); controller.doCommandWithParams(cmd, params); } }; setInterval(function(button) { button.checkClipboard(); }, this.CHECK_INTERVAL, this); this.setAttribute("onpopupshowing", "this.checkClipboard();");
Ты такое хотел?
P.S. Примерчик
Sleep, 500 ToolTip loop 10 { SetTitleMatchMode, 2 if WinExist("Thunderbird"){ ToolTip fnWinTray() WinMinimize WinClose Sleep, 100 ToolTip } } return fnWinTray(){ Send, {F9 Down} KeyWait, % A_ThisHotkey Send, {F9 Up} return }
Отредактировано Indomito (08-06-2015 13:06:03)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Indomito, спасобо. Буду разбираться. А вообще нужна кнопка Alt+PrintScreen (скриншот активного окна). Обращаюсь...
ммм... а разве такая функция есть в системе?
P.S. Просто я не помню
Вспомнил...
У меня так:
- Shift+PrintScreen - скриншот экрана
- Shift+Alt+PrintScreen - скриншот активного окна
Так проще IMHO
Отредактировано Indomito (08-06-2015 13:42:43)
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
manuk так пропиши в кнопке обработчик на JS по ЛКМ, ПКМ, etc. - Я что го недопонимаю, в чём проблема то?
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует
Indomito, не получается. Руки кривые и с головой... Может готовой поделишься?
могу без заморочек сделать кнопку, но скриншоты будут делаться на АНК не хочется морочить JS голову))))
1. В буфер обмена
2. ЛКМ - весь экран
3. ПКМ - активное окно
Сойдёт/Подойдёт?
"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах
Отсутствует