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

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

№855123-06-2015 05:06:46

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

Re: Custom Buttons

профи, может подскажите решение? возможно это можно организовать с помощью Custom Buttons. Или подскажите к кому обратиться.

Допустим есть 2 страницы одного сайта. На одной из них есть картинка. Но она появляется в зависимости от состояния. Как пример, есть товар, появляется картинка о наличии товара. Нет товара - нет картинки.
Как эту картинку транслировать на вторую страницу чтобы в удобном для меня виде на второй странице отображалось наличие товара?
Я смог только перенести картинку стилем, но адрес картинки постоянный, а не берётся с 1-й страницы, поэтому картинка показывается постоянно вне зависимости от состояния на первой странице.

@-moz-document url-prefix("https://www.адрес сайта"),
url-prefix("https://www.адрес сайта") {

элемент перед которым должна быть картинка::before{
content: url (адрес картинки) !important;
}

Отсутствует

 

№855223-06-2015 15:34:45

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 112
UA: Firefox 25.0

Re: Custom Buttons

Вот на этой странице http://www.merriam-webster.com/ есть справа колонка Word of the Day
Если кликнуть по иконке громкоговорителя, выскакивает окошко.
Собственно вопрос: как в этом окошке приделать eventListener на загрузку страницы?

Отсутствует

 

№855324-06-2015 00:51:10

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

Re: Custom Buttons

okkamas_knife

в общем кнопкой CB тут не обойтись :)

Отсутствует

 

№855424-06-2015 09:03:14

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 112
UA: Firefox 25.0

Re: Custom Buttons

А на мой вопрос выше есть какое то решение? Или не решается?

Отсутствует

 

№855524-06-2015 13:33:51

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 112
UA: Firefox 25.0

Re: Custom Buttons

okkamas_knife пишет:

бери за основу №209
прикручивай проверку адреса и цепляй листенер
там в коде ссылка есть на CB_Editor_Toggle_on_Top можешь там посмотреть как проверка адреса сделана

Я там ничего не понял, не мой уровень :|
А зачем проверять адрес? Я думал можно обратиться к окну document.commandDispatcher.focusedWindow или наподобие.

Отсутствует

 

№855626-06-2015 11:17:46

OmTatSat
Участник
 
Группа: Members
Зарегистрирован: 25-06-2015
Сообщений: 74
UA: Firefox 38.0

Re: Custom Buttons

Здравствуйте, как в кнопке поставить задержку между двумя действиями, типа sleep, wait...?

есть кнопка

firefoxTe = getBrowser().addTab('https://www.google.com.ua/'); getBrowser().selectedTab = firefoxTe;

goQuitApplication();

нужно чтобы кнопка перед закрытием немного подождала

Отсутствует

 

№855726-06-2015 14:46:45

aleksandros
Участник
 
Группа: Members
Зарегистрирован: 16-11-2008
Сообщений: 23
UA: Firefox 38.0

Re: Custom Buttons

Приветствую!
Поставил 38.0.5. Нужны кнопки "бинокль" ( поиск слова на странице ) и "карандаш" ( перевод страницы ).
Не подскажите, где их взять?

Отсутствует

 

№855826-06-2015 18:21:42

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

Re: Custom Buttons

Подскажите, пожалуйста, почему у меня заводится:

Выделить код

Код:

(function() {
    if ( document.getElementById("paste-plain-text") ) return;

    var menuItem = document.createElement("menuitem");
    var refChild = document.getElementById("contentAreaContextMenu").getElementsByAttribute("command", "cmd_paste")[0];
    menuItem.id = "paste-plain-text";
    menuItem.setAttribute("label", "Paste as plain text");
    menuItem.setAttribute("command", "cmd_pasteNoFormatting");
    menuItem.setAttribute("oncommand", "doCommand();");
    document.getElementById("contentAreaContextMenu").insertBefore(menuItem, refChild.nextSibling);

    document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", function() {
        var canPaste = refChild.getAttribute("disabled")  == "true";
        menuItem.hidden = !gContextMenu.onTextInput;
        menuItem.setAttribute("disabled", canPaste.toString());
    }, false);
})();

? :rolleyes:

aleksandros пишет:

поиск слова на странице

Она же и так имеется. Поищите в режиме настройки интерфейса. Ну или, если все-равно нужна, то:

Выделить код

Код:

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%u043E%u043A%u0430%u0437%u0430%u0442%u044C/%u0421%u043A%u0440%u044B%u0442%u044C%20%u043F%u0430%u043D%u0435%u043B%u044C%20%u043F%u043E%u0438%u0441%u043A%u0430%20%u043F%u043E%20%u0441%u0442%u0440%u0430%u043D%u0438%u0446%u0435%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDoAABSCAABFVgAADqXAAAXb9daH5AAAAERSURBVHjapJKxSoNBEIR/ER8gBJtoKkmnINoF1MZWfAQlnY8wMIF5ABstrGwFSytbG2vtbVQQtRCNKAgSsmn24PjZi0iKgeNm97vdva3MrJpGlZlVoCKtgjoD9QJqCOoe1DGoVoqZBOiB+gVlgd5BbU4CbPmLBuoG1C6odVD7oJ78/gNUuwS49qBLUHM1rwHqzv2TCNDMSl0pzGbP/ccIsOzmqJCchmughhFgMatgoQDYcf+1NIPU41GQPAvqyv3zEqCftXEIat7vO6AuUvmg1iJAF9Rn8Pc/2XkE6iDagzz5C5RAPdRAt6C2o03sghp40DeoDQ+aAbXki9SqzyQHPAfJfyoHnIJ6Szv+b8A0Gg8Ak04bfbA1mHsAAAAASUVORK5CYII%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5BgFindBar.hidden%20%3F%20gFindBar.onFindCommand%28%29%20%3A%20gFindBar.close%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

aleksandros пишет:

"карандаш" ( перевод страницы )

Нет такой кнопки по дефолту. Это от какого-то аддона.

Отсутствует

 

№855926-06-2015 18:40:02

aleksandros
Участник
 
Группа: Members
Зарегистрирован: 16-11-2008
Сообщений: 23
UA: Firefox 38.0

Re: Custom Buttons

turbot пишет:

Нет такой кнопки по дефолту. Это от какого-то аддона.

Кнопку поиска нашёл. Спасибо.

Отредактировано aleksandros (26-06-2015 18:49:44)

Отсутствует

 

№856026-06-2015 23:58:05

WatsonRus
Участник
 
Группа: Members
Зарегистрирован: 10-03-2009
Сообщений: 286
UA: Seamonkey 2.33

Re: Custom Buttons

А может кто сделать кнопку Highlight работающей в последних [seamonkey] и [firefox]?


Firefox ESR

Отсутствует

 

№856127-06-2015 22:42:01

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

Re: Custom Buttons

turbot пишет:

Подскажите, пожалуйста, почему у меня заводится:

Наверно нет в Firefox такой команды cmd_pasteNoFormatting и нет атрибута command для пункта контекстного меню который что то запускает, а есть атрибут oncommand

Отсутствует

 

№856227-06-2015 23:15:47

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

Re: Custom Buttons

bunda1
С "oncommand"="goDoCommand('cmd_pasteNoFormatting');" - заработало.

Спасибо. Затупил. :dumb:

Отсутствует

 

№856328-06-2015 01:48:02

init
Участник
 
Группа: Members
Зарегистрирован: 14-04-2012
Сообщений: 42
UA: Firefox 31.0

Re: Custom Buttons

WatsonRus пишет:

А может кто сделать кнопку Highlight работающей в последних [seamonkey] и [firefox]?

Так работает?

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

Выделить код

Код:

this.safeHTML = function(unsafeCode) {
    return unsafeCode.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/&/g, "&amp;");
};
this.unsafeHTML = function(safeCode) {
    return safeCode.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">");
};
this. clickHandler = function (event)
{
    if ((event. button == 2) && event. ctrlKey)
        this. mObj. setPri ();
    else
        this. mObj. setSub ();
    if (event. ctrlKey)
    {
        this. showPopup (this);
        return;
    }
    if (event. button == 0)
    {
    this. innerHTML = this. innerHTML || this.safeHTML(content. document. body. innerHTML);
    this. searchPrompt('',false);        
    }
    else if (event. button == 1)
    {
    this. showPopup (this);    
    }
    else
    {
        content. document. body. innerHTML = this.unsafeHTML(this. innerHTML) || content. document. body. innerHTML;
        this. innerHTML = "";
    }
};
this.showPopup = function(node)
{
    var popup = document.getElementById("custombuttons-contextpopup");
    var x = node.boxObject.x;
    var y = node.boxObject.y + node.boxObject.height;
    document.popupNode = node;
    popup.showPopup(node, x, y, "popup", null, null);
};
this. doHighlight = function (bodyText, searchTerm, highlightStartTag, highlightEndTag) 
{
    if ((!highlightStartTag) || (!highlightEndTag))
    {
        highlightStartTag = "<font style='background-color:" + this. highlightColor + ";'>";
        highlightEndTag = "</font>";
    }
    var newText = "";
    var i = -1;
    var lcSearchTerm = searchTerm.toLowerCase();
    var lcBodyText = bodyText.toLowerCase();
    while (bodyText.length > 0)
    {
        i = lcBodyText.indexOf(lcSearchTerm, i+1);
        if (i < 0)
        {
            newText += bodyText;
            bodyText = "";
        }
        else
        {
            if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i))
            {
                if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i))
                {
                    newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
                    bodyText = bodyText.substr(i + searchTerm.length);
                    lcBodyText = bodyText.toLowerCase();
                    i = -1;
                }
            }
        }
    }
    return newText;
}
this. highlightSearchTerms = function (searchText, treatAsPhrase, warnOnFailure, highlightStartTag, highlightEndTag)
{
    if (treatAsPhrase)
    {
        searchArray = [searchText];
    }
    else
    {
        searchArray = searchText.split(" ");
    }
    if (!content.document.body || typeof(content.document.body.innerHTML) == "undefined")
    {
        if (warnOnFailure)
        {
            alert("The text of this page is not available. Highlighting will not work.");
        }
        return false;
    }
    var bodyText = content.document.body.innerHTML;
    for (var i = 0; i < searchArray.length; i++)
    {
        bodyText = this. doHighlight(bodyText, searchArray[i], highlightStartTag, highlightEndTag);
    }
    content.document.body.innerHTML = bodyText;
    return true;
}
this. searchPrompt = function ()
{
    var searchText = document.commandDispatcher.focusedWindow.getSelection().toString() || prompt('Highlight:','');
    searchText && this. highlightSearchTerms(searchText, true);
}

this. changeColor = function (menuitem, event)
{
    var topmenuitem = document. getElementById (document. popupNode. firstId);
    topmenuitem. setAttribute ("label", "* " + menuitem. getAttribute ("label"));
    document. popupNode. highlightColor = menuitem. getAttribute ("value");
};

var colors =
{
    "Yellow": "yellow", "Green": "green", "Blue": "blue", "Red": "red"
};
var mItem = {};
document. getElementById (CB2const. sCBCtxtMenu). setAttribute ("oncommand", "event.stopPropagation()");
var mObj = custombuttons. getCbContextObj (this);
this. mObj = mObj;
mObj. setSub ();
var mItem = new mObj. getItem ();
mItem. id = "topmenuitem";
mItem. label = "* Yellow";
mItem. value = "yellow";
mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
this. firstId = mItem. id;
mItem = new mObj. getItem ();
mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
for (var i in colors)
{
    var mItem = new mObj. getItem ();
    mItem. id = i;
    mItem. label = i;
    mItem. value = colors [i];
    mItem. oncommand = "document. popupNode. changeColor (this, event);"
    mItem = mObj. insertBefore (mItem, mObj. oMenu. lastChild);
}
mItem = new mObj. getItem ();
mObj. insertBefore (mItem, mObj. oMenu. lastChild);

this. innerHTML = "";
this. highlightColor = "yellow";
this. setAttribute ('onclick', 'this.clickHandler(event)');
this.setAttribute("context", "");

this.tooltipText = "L=Highlight\nM=Select color + CB menu \nR=Remove highlight ";

Отсутствует

 

№856428-06-2015 10:56:08

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 39.0

Re: Custom Buttons

WatsonRus

А может кто сделать кнопку Highlight работающей в последних [seamonkey] и [firefox]?

Использовать букмарклет

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

Выделить код

Код:

javascript:(function(){var%20count=0,%20text,%20dv;text=prompt("Search%20phrase:",%20"");if(text==null%20||%20text.length==0)return;dv=document.defaultView;function%20searchWithinNode(node,%20te,%20len){var%20pos,%20skip,%20spannode,%20middlebit,%20endbit,%20middleclone;skip=0;if(%20node.nodeType==3%20){pos=node.data.toUpperCase().indexOf(te);if(pos>=0){spannode=document.createElement("SPAN");spannode.style.backgroundColor="yellow";middlebit=node.splitText(pos);endbit=middlebit.splitText(len);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else%20if(%20node.nodeType==1&&%20node.childNodes%20&&%20node.tagName.toUpperCase()!="SCRIPT"%20&&%20node.tagName.toUpperCase!="STYLE"){for%20(var%20child=0;%20child%20<%20node.childNodes.length;%20++child){child=child+searchWithinNode(node.childNodes[child],%20te,%20len);}}return%20skip;}window.status="Searching%20for%20'"+text+"'...";searchWithinNode(document.body,%20text.toUpperCase(),%20text.length);window.status="Found%20"+count+"%20occurrence"+(count==1?"":"s")+"%20of%20'"+text+"'.";})();


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№856528-06-2015 11:40:28

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 20.0

Re: Custom Buttons

villa7

Использовать букмарклет

Может я не прав, но по-моему в этом месте

Выделить код

Код:

if( node.nodeType==1&& node.childNodes && node.tagName.toUpperCase()!="SCRIPT" && node.tagName.toUpperCase!="STYLE")

не хватает пары скобок.
node.tagName.toUpperCase() !="STYLE"

Отсутствует

 

№856628-06-2015 12:03:56

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 39.0

Re: Custom Buttons

rbfyec
Проверьте, хватает или нет.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№856728-06-2015 17:25:31

rbfyec
Участник
 
Группа: Members
Зарегистрирован: 07-07-2012
Сообщений: 365
UA: Firefox 20.0

Re: Custom Buttons

villa7 пишет:

rbfyec
Проверьте, хватает или нет.

Дак а что тут проверять: toUpperCase() - это метод и чтобы его вызвать, нужны скобки :)

Отсутствует

 

№856828-06-2015 19:42:33

WatsonRus
Участник
 
Группа: Members
Зарегистрирован: 10-03-2009
Сообщений: 286
UA: Seamonkey 2.33

Re: Custom Buttons

init пишет:

Так работает?

Да, спасибо большое. :)


Добавлено:
Поправка - в [seamonkey] 2.33 работает на ура, в [firefox] 38.0.1 ESR не пашет. :( Впрочем, мне важнее была кнопка именно в [seamonkey], ибо в [firefox] есть неотваливающаяся кнопка в Toolbar buttons, а в той же версии Toolbar buttons в [seamonkey] ее нет в списках. :(

Еще добавлено:
Еще поправка - сегодня вроде и в [firefox] работает. :mad:


villa7
Мое ИМХО - букмарклет это изврат, только для того случая, когда ничего иное не работает. Зачем мне держать включенной панель закладок только для одного букмарклета?

All
Кстати, а почему кнопка Highlight так часто отваливается? Что мозилловцы так часто ломают?


И еще:
У кого есть допуск - надо бы Highlight и в Готовых кнопках поправить на работающий вариант.

Отредактировано WatsonRus (29-06-2015 19:37:58)


Firefox ESR

Отсутствует

 

№856903-07-2015 12:48:06

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 223
UA: Firefox 25.0

Re: Custom Buttons

Я хочу убрать целые блоки со страницы. Вот таким способом document.body.innerHTML.replace('ненужный_блок', '')
Вот есть допустим блок

Выделить код

Код:

<footer class="footer-thin">
 -----   тут куча всяких вложенных элементов
</footer>

Я понимаю, что надо в replace подставить регулярку, которая бы определяла: начиная с <footer class="footer-thin"> до </footer> включая всё что между ними
Только я не знаю как это записать, в регэспах не понимаю.

Отсутствует

 

№857003-07-2015 14:23:31

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

Re: Custom Buttons

toxa
Здесь проще стиль использовать:

скрытый текст
footer.footer-thin {
display: none !important;
}

Отсутствует

 

№857104-07-2015 12:55:16

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 223
UA: Firefox 25.0

Re: Custom Buttons

Kamui пишет:

toxa
Здесь проще стиль использовать

Я знаю, но именно в этом случае я не хотел делать через стиль.
Способ, предложенный okkamas_knife подходит, я даже сначала и пытался делать что то наподобие.
Только не догадался сделать "метки" по которым удобно резать хтмл. Я пробовал резать просто по словам в коде, ну и конечно запутался.


У меня еще вопросик. В одной из кнопок у меня есть кусочек кода

Выделить код

Код:

addEventListener("DOMContentLoaded", function() {блабла}, gBrowser, true)

А как сделать, чтобы этот Listener прицеплялся и к окошкам, которые я открываю скриптами из основного окна?

Отсутствует

 

№857204-07-2015 18:48:13

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 223
UA: Firefox 25.0

Re: Custom Buttons

Спасибо, okkamas_knife, буду разбираться.

Еще вопрос. Если открываем окно с помощью window.open(), можно ли как то ускорить его открытие?
Понятно, что создание окна требует больше времени, чем открытие новой вкладки, а все же?

Отредактировано toxa (04-07-2015 18:48:55)

Отсутствует

 

№857305-07-2015 12:19:47

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 223
UA: Firefox 25.0

Re: Custom Buttons

okkamas_knife
Я попробовал создать див:

Выделить код

Код:

  var div = document.createElement('div')
  div.innerHTML = '<textarea>TEST TEST TEST</textarea>'; 
  div.setAttribute('class', 'my-div');
  div.style.position = 'absolute'
  var scroll = content.document.body.scrollTop
  div.style.top = scroll + 200 + 'px'
  div.style.left = Math.floor(content.document.body.clientWidth/2) - 150 + 'px';
  
  content.document.body.appendChild(div)

style = content.document.createElement('style');
style.innerHTML='.my-div { width:300px;height:110px;background-color:#F08080;text-align: center;border: 2px groove black}'

content.document.head.appendChild(style);

Но возникли 2 проблемы.
Внутри дива любой хтмл код отображается простым текстом. Даже простейшая textarea не получается.
И второе - на диве не работает выделение и отсутствует контекстное меню.

Отсутствует

 

№857406-07-2015 18:05:28

toxa
Участник
 
Группа: Members
Зарегистрирован: 11-04-2012
Сообщений: 223
UA: Firefox 25.0

Re: Custom Buttons

okkamas_knife
Как оказалось, все дело в том, что я использовал createElement вместо createElementNS. Если в моем коде подставить createElementNS, тоже все работает.

А почему не годится createElement - даже не представляю...

Отсутствует

 

№857506-07-2015 20:03:13

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4291
UA: Firefox 39.0

Re: Custom Buttons

toxa пишет:

А почему не годится createElement - даже не представляю...

У документа браузера XUL namespace по умолчанию.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

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