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

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

№40102-06-2013 22:02:56

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 24.0

Re: Greasemonkey

SuperUser пишет

Интересно есть ли возможность перенести настройки скриптов при создании нового профиля без копирования файла prefs.js? Естественно о переносе строк по одной из этого файла нет и речи, слишком долго и не всегда всё гладко проходит.

Перенести папку gm_scripts

Отредактировано voqabuhe (02-06-2013 22:03:22)

Отсутствует

 

№40203-06-2013 22:44:08

SuperUser
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 59
UA: Firefox 17.0

Re: Greasemonkey

voqabuhe пишет
SuperUser пишет

Интересно есть ли возможность перенести настройки скриптов при создании нового профиля без копирования файла prefs.js? Естественно о переносе строк по одной из этого файла нет и речи, слишком долго и не всегда всё гладко проходит.

Перенести папку gm_scripts

Пробовали? Перенеслись настройки?

Отсутствует

 

№40303-06-2013 23:50:14

CoolCmd
Участник
 
Группа: Members
Зарегистрирован: 29-09-2008
Сообщений: 685
UA: Firefox 21.0

Re: Greasemonkey

SuperUser пишет

Естественно о переносе строк по одной из этого файла нет и речи, слишком долго и не всегда всё гладко проходит.

переносить нужно строки, которые начинаются на

Выделить код

Код:

user_pref("extensions.greasemonkey.scriptvals.

они все одним куском в файле лежат. перенести - дело 30 секунд.


леса живет в лису?

Отсутствует

 

№40404-06-2013 21:29:35

SuperUser
Участник
 
Группа: Members
Зарегистрирован: 30-01-2012
Сообщений: 59
UA: Firefox 17.0

Re: Greasemonkey

CoolCmd пишет
SuperUser пишет

Естественно о переносе строк по одной из этого файла нет и речи, слишком долго и не всегда всё гладко проходит.

переносить нужно строки, которые начинаются на

Выделить код

Код:

user_pref("extensions.greasemonkey.scriptvals.

они все одним куском в файле лежат. перенести - дело 30 секунд.

Спасибо. Вроде бы заработало. А там посмотрим.

Отсутствует

 

№40505-06-2013 19:02:21

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

Re: Greasemonkey

Как нужно использовать результат работы функции?

Выделить код

Код:

function myFunc(a){
    var x=n;
    var y=m;
    ..............
    ..............
    return [x, y];
}

Я могу посмотреть этот результат: alert(myFunc(a))
Но мне надо не увидеть его, а подставить в другой код (в частности window.scrollTo())

Отсутствует

 

№40605-06-2013 19:20:40

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

Re: Greasemonkey

toxa
Для Firefox:

Выделить код

Код:

function myFunc() {
    return [0, 1];
}
var [x, y] = myFunc();
alert("x = " + x + "\ny = " + y);

Не только для Firefox:

Выделить код

Код:

function myFunc() {
    return [0, 1];
}
var arr = myFunc();
var x = arr[0];
var y = arr[1];
alert("x = " + x + "\ny = " + y);

А вообще, лучше откуда-нибудь отсюда начать: http://learn.javascript.ru/


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

Отсутствует

 

№40705-06-2013 21:18:49

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

Re: Greasemonkey

Infocatcher пишет

А вообще, лучше откуда-нибудь отсюда начать: http://learn.javascript.ru/

Я там часто бываю. Но к сожалению далеко не всё понятно.

Подскажите ещё как сделать, чтобы выражение типа document.images.myImage вставленное в prompt, можно было подставить вместо obj

Выделить код

Код:

obj.src="чего-то там"

Отсутствует

 

№40805-06-2013 23:20:11

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

Re: Greasemonkey

toxa пишет

Подскажите ещё как сделать, чтобы выражение типа document.images.myImage вставленное в prompt, можно было подставить вместо obj

Выделить код

Код:

obj.src="чего-то там"

Зачем такое может понадобиться?
Можно так:

Выделить код

Код:

var str = "document.images.myImage";
var obj = eval(str);
...

Но если это не в тестовых целях, то, скорее всего, что-то не так с логикой скрипта. :)


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

Отсутствует

 

№40906-06-2013 11:02:03

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

Re: Greasemonkey

Infocatcher пишет

...Но если это не в тестовых целях, то, скорее всего, что-то не так с логикой скрипта.

Да, это было нужно именно  в тестовых целях.
Спасибо большое! :)

Отсутствует

 

№41009-06-2013 17:14:19

Biboran
Участник
 
Группа: Members
Зарегистрирован: 09-06-2013
Сообщений: 1
UA: Firefox 21.0

Re: Greasemonkey

Решено.

Отредактировано Biboran (09-06-2013 19:12:25)

Отсутствует

 

№41125-06-2013 19:52:56

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

Re: Greasemonkey

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

Советы, которые мне дали, помогли, но хотелось бы чтоб код выглядел удобочитаемым, "лесенкой". Сейчас всё что удалось добиться - это если я вставляю document.body.innerHTML то выходит "лесенка". А если innerHTML отдельного элемента, код идёт сплошным текстом.

Что можно сделать?

Отсутствует

 

№41201-07-2013 12:25:49

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 20.0

Re: Greasemonkey

У меня есть скрипт, он выполняет на странице определённое действие. Можно составить условие, чтобы действие НЕ выполнялось, если выскочил alert или confirm или prompt?

Отсутствует

 

№41301-07-2013 13:12:40

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 22.0

Re: Greasemonkey

Ferguss114
Чтоб код выглядел удобочитаемым, его придётся самостоятельно форматировать. Относительно простая и полноценная реализация может выглядеть так:

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

Выделить код

Код:

javascript:(function()
{
  var tab='  ', emptyTags={img:1, br:1, link:1, input:1, hr:1, meta:1}, xml=false, counter=0, showLines=1,
    doc=window.document, loc=window.location, wndFeatures='resizable=yes,scrollbars=yes,location=no', closeTags = '</span></li>';
  
  var openTagNameHead=function(name)
  {
    return '<span class=\'tag\'>&lt;'+name+'';
  };

  var openTagNameFoot=function(xmlemptyTag)
  {
    return (xmlemptyTag?'/':'')+'&gt;</span>';
  };

  var closeTagName=function(name, xmlemptyTag)
  {
    if(xmlemptyTag || emptyTags[name.toLowerCase()]) return '';
    return '<span class=\'tag\'>&lt;/'+name+'&gt;</span>';
  };

  var lineHead=function()
  {
    var lineNumber=counter.toString();
    while(lineNumber.length<3) lineNumber='0'+lineNumber;
    return '<li class=\'line'+(showLines&&((counter++)&1)?' dark\'':'\'')+'><span>';
  };
 
  var escapeHTML=function(str)
  {
    return str.replace(/</g,'&lt;').replace(/>/g,'&gt;');
  };

  var getDoctype=function(doc)
  {
    var doctype=doc.doctype, code='';
    if(doctype)
    {
      code=lineHead()+openTagNameHead('!DOCTYPE')+' <span class=\'attrDoc\'>'+doctype.nodeName+
            (doctype.publicId?' PUBLIC \''+doctype.publicId+'\'':'')+
            (doctype.systemId?'</span></span>'+closeTags+lineHead()+'<span class=\'tag\'><span class=\'attrDoc\'>'+tab+'\''+doctype.systemId+'\'':'')+'</span>'+openTagNameFoot()+closeTags;
    }
    return code;
  };

  var getAttrs=function(ele)
  {
    var attrs=ele.attributes, attr=null, ret='';
    for(var i=0; attr=attrs[i]; i++)
    {
      if(attr.specified && attr.value)
      {
        ret+=' <span class=\'attrTitle\'>'+attr.name+'</span>=<span class=\'attrValue\'>\x22'+escapeHTML(attr.value.replace(/\t/g, tab))+'\x22</span> ';
      }
    }
    return ret;
  };

  var getTextNodeData=function(ele)
  {
    return escapeHTML(ele.nodeValue.replace(/[\n\t\r\u00A0]+ */g,'').replace(/ +/g,' '));
  };

  var getIndent=function(deep)
  {
    var i=0, ret='';
    while(i<deep)
    {
      ret+=tab;
      i++;
    }
    return ret;
  };

  var getLayer=function(ele, deep, singleText)
  {
    var text='', indent=getIndent(deep++);
    switch (ele.nodeType)
    {
      case 1:
      {
        var childs=ele.childNodes, child=null;
        var simple=(childs.length==0)||(childs.length==1 && childs[0].nodeType==3);
        var xmlemptyTag=xml&&childs.length==0;
        var ret=lineHead()+indent+openTagNameHead(ele.nodeName)+getAttrs(ele)+openTagNameFoot(xmlemptyTag);
        if(!simple) ret+=closeTags;
        for(var i=0; child=childs[i]; i++)
        {
          ret+=getLayer(child, deep, !simple&&child.nodeType==3);
        }
        if(simple)
        {
          ret+=(ele.nodeName.toLowerCase()=='textarea'?escapeHTML(ele.value):'')+closeTagName(ele.nodeName, xmlemptyTag)+closeTags;
        }
        else
        {
          ret+=lineHead()+indent+closeTagName(ele.nodeName, xmlemptyTag)+closeTags;
        }
        return ret; 
      }

      case 3:
      {        
        if((text=getTextNodeData(ele)) && singleText) 
        {
          return lineHead()+indent+text+closeTags;
        }
        else
        {
          return text;
        }
      }

      case 4:
      {
        text=getTextNodeData(ele);
        return lineHead()+indent+'<span class=\'cdata\'>&lt;![CDATA[</span>'+text+'<span class=\'cdata\'>]]&gt;</span>'+closeTags;
      }

      case 8:
      {
        text=getTextNodeData(ele);
        return lineHead()+indent+'<span class=\'comment\'>&lt;!--'+text+'--&gt;</span>'+closeTags;
      }

    }

    return ele.nodeType
  };

  var getLiveMarkup=function(selWin)
  {
    var ele, markup='';
    if(selWin)
    {
        var range=selWin.getSelection().getRangeAt(0), pEle=range.commonAncestorContainer;
        if(pEle.nodeType==3 || pEle.nodeType==4)pEle=pEle.parentNode;
        ele=pEle.cloneNode(false);
        ele.appendChild(range.cloneContents());

        var startCon=range.startContainer, endCon=range.endContainer;
        if(startCon != pEle.firstChild || (startCon.nodeType == 3 && range.startOffset != 0))ele.insertBefore(doc.createTextNode('\u2026'), ele.firstChild);
        if(endCon != pEle.lastChild || (endCon.nodeType == 3 && range.endOffset != endCon.nodeValue.length))ele.appendChild(doc.createTextNode('\u2026'));
    }
    else
    {
        markup=getDoctype(doc);
        ele=doc.documentElement;
    };
    markup+=getLayer(ele,0);
    return markup;
  };

  var getSelWin=function(w)
  {
    if(w && w.getSelection){
        if(w.getSelection().toString())return w;
        for(var i = 0, f, r; f = w.frames[i]; i++){
            try{if(r = arguments.callee(f))return r}catch(e){}
        }
    }
  };

    var selWin=getSelWin(window);
    if(selWin){
        doc=selWin.document;
        loc=selWin.location;
        wndFeatures+=',width=800,height=500,left=100,top=100';
    };
    xml=/[a-z]/.test(doc.documentElement.nodeName);
    var markup='<!DOCTYPE html PUBLIC><html><head><title>Snapshot: '+((doc.getElementsByTagName('title').length && escapeHTML(doc.getElementsByTagName('title')[0].text)) || (loc.protocol+'//'+loc.host+loc.pathname))+'</title>'
        +'<style type=\'text/css\'>'
        +'body{padding:0 5px;margin:0;font-family:sans-serif;font-size:.7em;background-color:#FFF;color:#000;}#content{white-space:pre-wrap}ol{color:#999;}span{color:#000}.tag{color:#05F}.attrTitle{color:#E00}.attrValue{color:#C0C}.attrDoc{color:#800080}.comment{color:#008000}.cdata{color:#63D}.line{margin:0;padding:0}.dark{background-color:#FAFAFA}'
        +'</style></head><body>'
        +'<ol id=\'content\'>'+getLiveMarkup(selWin)+'</ol></body></html>';
    var wnd=window.open('about:blank', '_blank', wndFeatures);
    wnd.document.write(markup);
    wnd.document.onkeydown=function(e){if(e.keyCode==27)wnd.close()};
    wnd.document.close();

})()

Добавлено 01-07-2013 13:21:27
Чайник
Если они будут показаны, то скрипт и так остановится. Или нужно определить сам факт их вызова из скрипта на странице? Тогда силами GM, наверное только перезаписывать window.alert и там уже определять.

Отредактировано Lex1 (01-07-2013 13:21:27)

Отсутствует

 

№41401-07-2013 14:19:16

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 20.0

Re: Greasemonkey

Lex1 пишет:
Чайник
Если они будут показаны, то скрипт и так остановится.

Я ошибся темой, речь идёт о скрипте не GM, а Firegestures. Но принцип наверное один.
Там в Firegestures если на странице вызван алерт, жест всё равно своё дело делает, а мне это не нужно.
Вот я как раз хочу, чтобы если на экране одно из этих окон (алерт, промпт....), команда не выполнялась.

Отсутствует

 

№41501-07-2013 14:49:35

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 22.0

Re: Greasemonkey

Ну, вероятно класс, Object.prototype.toString.call(document.commandDispatcher.focusedWindow).slice(8, -1) не должен быть ChromeWindow

Или, что в данном случае кажется похожим - в фокусе должна быть сама страница, а не интерфейс браузера.

Выделить код

Код:

document.commandDispatcher.focusedWindow.top == content

Отредактировано Lex1 (01-07-2013 15:08:16)

Отсутствует

 

№41601-07-2013 15:27:35

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

Re: Greasemonkey

Чайник пишет

Там в Firegestures если на странице вызван алерт, жест всё равно своё дело делает, а мне это не нужно.

У меня вот так сработало, если в начало кода

Выделить код

Код:

if (gBrowser.selectedBrowser.hasAttribute("tabmodalPromptShowing")) return;

Отсутствует

 

№41701-07-2013 15:36:33

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

Re: Greasemonkey

Lex1
Подскажите пожалуйста, как поправить скрипт Google Currency Converter.
Он отправляет строку вида http://www.google.com/ig/calculator?hl=ru&q=ЦЕНАвалюта1=валюта2 и получает страницу с содержимым {lhs: "10 U.S. dollars",rhs: "327.954873 Russian rubles",error: "",icc: true} далее он парсит эту строку и извлекает значения.

Я хочу чтобы отправлялась строка вида http://yandex.ru/yandsearch?country=ru&text=ЦЕНА Валюта1 to Валюта2 и парсил значение элемента TR[class="z-converter__row"] и выводил все как и раньше, возможно ли?

Отсутствует

 

№41801-07-2013 15:52:17

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 20.0

Re: Greasemonkey

Lex1, работают оба варианта: document.commandDispatcher.focusedWindow!='[object ChromeWindow]' и document.commandDispatcher.focusedWindow.top == content (кстати, а почему вы забраковали первый вариант?)

Dumby, этот вариант тоже работает if (gBrowser.selectedBrowser.hasAttribute("tabmodalPromptShowing")) return; :)

Я теперь и думаю: а какой из них оптимальный?

Отсутствует

 

№41901-07-2013 19:18:55

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 22.0

Re: Greasemonkey

Чайник
Если нужна именно остановка на алертах, то решение Dumby лучше.

кстати, а почему вы забраковали первый вариант

Он был слишком уж похож на первый.

Отсутствует

 

№42001-07-2013 19:56:38

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 20.0

Re: Greasemonkey

Lex1 и Dumby

Благодарю! ;)

Отсутствует

 

№42101-07-2013 21:25:23

Lex1
Участник
 
Группа: Members
Зарегистрирован: 07-07-2007
Сообщений: 260
UA: Firefox 22.0

Re: Greasemonkey

Kamui
Первое заменяется на

Выделить код

Код:

return 'http://yandex.ru/yandsearch?country=ru&text=' + precio + '+' + monedaFrom + '+' + monedaTo;

Второе на

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

Выделить код

Код:

var convertir = function (){
        var url = urlConvert();
        GM_xmlhttpRequest({
            method: 'GET',
            url: url,
            onload: function(r) {
                var json = r.responseText;

                var doc = document.implementation.createHTMLDocument("");
                doc.documentElement.innerHTML = json;
                json = doc.querySelectorAll('.z-converter__data > strong');

                $('res-igcc').innerHTML = json[0].textContent + ' = ' + json[1].textContent;
                $('monedaFrom').value = GM_getValue('from');
                $('monedaTo').value = GM_getValue('to');
            }
        });
    }

Отредактировано Lex1 (01-07-2013 21:44:17)

Отсутствует

 

№42202-07-2013 07:00:58

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

Re: Greasemonkey

Lex1
Благодарю :beer: наконец-то все заработало :D

Блин, все-таки офигенский скрипт теперь получился, можно практически под любой сайт переделать :D

Отредактировано Kamui (02-07-2013 15:01:42)

Отсутствует

 

№42311-07-2013 19:45:03

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 20.0

Re: Greasemonkey

Есть код

Выделить код

Код:

javascript:open('http://www.url.php','')

Как тут сделать event listener на загрузку страницы?

Отсутствует

 

№42411-07-2013 20:15:53

CoolCmd
Участник
 
Группа: Members
Зарегистрирован: 29-09-2008
Сообщений: 685
UA: Firefox 22.0

Re: Greasemonkey

Чайник добавить http://www.url.php в @include
или

Выделить код

Код:

open('http://www.url.php','').document.addEventListener('DOMContentLoaded', OnDOMContentLoaded, false);

Отредактировано CoolCmd (11-07-2013 20:45:50)


леса живет в лису?

Отсутствует

 

№42511-07-2013 21:15:39

Чайник
Участник
 
Группа: Members
Зарегистрирован: 15-04-2008
Сообщений: 268
UA: Firefox 20.0

Re: Greasemonkey

CoolCmd пишет
Выделить код

Код:

open('http://www.url.php','').document.addEventListener('DOMContentLoaded', OnDOMContentLoaded, false);

Не получается у меня. Я пробую открыть главную страницу форума - запускаю этот код через Scratchpad (просто чтоб попробовать)

Выделить код

Код:

open('http://forum.mozilla-russia.org/index.php','').document.addEventListener('DOMContentLoaded', function(){alert(1)}, false);

Алерт не появляется.

Отредактировано Чайник (11-07-2013 21:17:42)

Отсутствует

 

Board footer

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