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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№850104-06-2015 07:20:54

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

А с какой версией он совместим?

Отредактировано Indomito (04-06-2015 16:54:47)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№850204-06-2015 16:50:42

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

Задачка появилась :)
Имеем такой элемент на странице:
s_1433425673_9727127_61dcfee4fb.png
Нужно при загрузке страницы на определённом домене, а еще лучше конкретную страницу, парсить страницу на содержание подчёркнутого на скриншоте элемента и обрезать эту часть. Желательно бы иметь возможность добавлять несколько страниц для обработки и возможность добавления элементов для поиска и обрезки.
Думаю для мастеров несложно будет.

Отсутствует

 

№850304-06-2015 17:02:54

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

Отсутствует

 

№850404-06-2015 18:32:19

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

turbot
Да, видел, но проблема в том что не надо вырезать весь блок, надо его обрезать если он содержит заданный текст.

Отсутствует

 

№850504-06-2015 20:16:58

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

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,'');
}

Отсутствует

 

№850604-06-2015 21:12:27

Billions7
Участник
 
Группа: Members
Зарегистрирован: 02-06-2015
Сообщений: 17
UA: Firefox 37.0

Re: Custom Buttons

Подскажите пожалуйста тогда, возможно ли сделать кнопку, которая открывала бы site.ru без загрузки счетчиков типа liveinternet?

Отсутствует

 

№850704-06-2015 21:54:24

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

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")
);


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

Отсутствует

 

№850804-06-2015 23:44:01

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

Re: Custom Buttons

Billions7 пишет

без загрузки счетчиков типа liveinternet

Есть такая кнопка. Adblock Plus называется. + подписка АнтиСчётчик. :rolleyes:

Отсутствует

 

№850905-06-2015 06:34:47

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

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")
);


Но появилась другая проблема, при смене ленты для прочтения, содержимое новой ленты подгружается без перезагрузки страницы и код не срабатывает. В сниппетах видел коды для отслеживания изменений урлбара, но сам пока не могу осилить :(

Отсутствует

 

№851005-06-2015 12:48:44

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

okkamas_knife пишет

да ладно!
вон даже в старом куча ругани на 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)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№851105-06-2015 13:22:30

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

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 ) });


Но во время прокрутки подгружаются еще записи и они уже не обрабатываются, можно как-то это отследить?

Отсутствует

 

№851205-06-2015 15:34:06

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

okkamas_knife пишет

Indomito
extensions\custombuttons@xsms.org\chrome\custombuttonszzzz\content\custombuttons\overlay.js
ищи по gClipboard

это адрес на компе или в интернете.... в интернете не нашёл...





Ну я и балда - это же профиль мозиллы :D


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№851306-06-2015 03:41:07

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

okkamas_knife пишет

в принципе да. вроде было какоето событие реагирующее на изменение DOM но тут я не помощник

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

Отсутствует

 

№851406-06-2015 09:47:54

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 38.0

Re: Custom Buttons

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")
);


Благодарю за помощь :beer:

Отредактировано Kamui (06-06-2015 09:48:14)

Отсутствует

 

№851507-06-2015 00:00:51

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

okkamas_knife пишет

в профиле
ой!
там вместо custombuttonszzzz должен быть custombuttons.jar конечно же..

не страшно....я это сразу понял, т.е. что это опечатка ;)

А разве в  chrome://custombuttons/content/cb2api.js  её не должно быть?

Отредактировано Indomito (07-06-2015 00:35:23)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№851608-06-2015 02:41:12

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Palemoon 25.0

Re: Custom Buttons

Можно ли сделать кнопку, при нажатии на которую срабатывала, допустим, клавиша F10?

Отсутствует

 

№851708-06-2015 04:45:43

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

Re: Custom Buttons

manuk пишет

F10

Выделить код

Код:

window.QueryInterface(Components.interfaces.nsIInterfaceRequestor).getInterface(Components.interfaces.nsIDOMWindowUtils).sendKeyEvent("keypress",0x79,0,0);

https://mxr.mozilla.org/mozilla/source/ … yEvent.idl

Отсутствует

 

№851808-06-2015 10:54:56

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Palemoon 25.0

Re: Custom Buttons

turbot, спасибо. А возможно, чтобы по нажатию кнопки срабатывал системный PrintScreen, или только внутри FF?

Отсутствует

 

№851908-06-2015 11:17:14

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

manuk пишет

turbot, спасибо. А возможно, чтобы по нажатию кнопки срабатывал системный PrintScreen, или только внутри FF?

можно запустить программу, можно сделать что бы срабатывал и системный PrintScreen.
Но что ты именно хочешь то?

Да, проще написать скрипт скажем на AHK и запустить его как внешняя программа, а уж в скрипте на АНК можно сделать что угодно.

Пример кнопки

Clipboard

Выделить код

Код:

/*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();");


Тут и запуск внешней программы и работа с буфером обмена(запоминается 16 значений в виде стека, исключая повторы).

Ты такое хотел? ;)

P.S. Примерчик

Скрипт свёртки в трей - ThunderbirdHideTray.ahk

Выделить код

Код:

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)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№852008-06-2015 13:13:57

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Palemoon 25.0

Re: Custom Buttons

Indomito, спасобо. Буду разбираться. А вообще нужна кнопка Alt+PrintScreen (скриншот активного окна). Обращаюсь...:)

Отсутствует

 

№852108-06-2015 13:19:38

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

manuk пишет

Indomito, спасобо. Буду разбираться. А вообще нужна кнопка Alt+PrintScreen (скриншот активного окна). Обращаюсь...:)

ммм... а разве такая функция есть в системе?
P.S. Просто я не помню ;)


Вспомнил... :D

У меня так:
- Shift+PrintScreen          - скриншот экрана
- Shift+Alt+PrintScreen    - скриншот активного окна

Так проще IMHO

Отредактировано Indomito (08-06-2015 13:42:43)


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№852208-06-2015 13:45:24

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Palemoon 25.0

Re: Custom Buttons

Indomito, в XP точно есть :). Сейчас использую виртуальную клаву для нажатия, а хотелось бы одним нажатием мыши на кнопку.

Отредактировано manuk (08-06-2015 13:45:48)

Отсутствует

 

№852308-06-2015 13:53:36

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

manuk так пропиши в кнопке обработчик на JS по ЛКМ, ПКМ, etc.  -  Я что го недопонимаю, в чём проблема то?


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

№852408-06-2015 13:56:08

manuk
Участник
 
Группа: Members
Зарегистрирован: 17-10-2010
Сообщений: 306
UA: Palemoon 25.0

Re: Custom Buttons

Indomito, не получается. Руки кривые и с головой... Может готовой поделишься?

Отсутствует

 

№852508-06-2015 14:15:36

Indomito
Участник
 
Группа: Members
Откуда: Москва-Север
Зарегистрирован: 27-08-2009
Сообщений: 426
UA: Firefox 38.0

Re: Custom Buttons

manuk пишет

Indomito, не получается. Руки кривые и с головой... Может готовой поделишься?

могу без заморочек сделать кнопку, но скриншоты будут делаться на АНК не хочется морочить JS голову))))
1. В буфер обмена
2. ЛКМ - весь экран
3. ПКМ - активное окно

Сойдёт/Подойдёт?


"Никогда не выявляйте в программе ошибки, если не знаете, что с ними дальше делать." Штейнбах

Отсутствует

 

Board footer

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