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

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№45123-10-2013 20:11:36

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

Re: Greasemonkey

Как в просмотре кода выделенного фрагмента реализована подсветка?

Встроенный поиск F3 находит требуемое (в исходнике страницы), только если это plain text, без тегов. А "Исходный код выделенного фрагмента" умеет подсветить и текст, в котором теги были.

Отредактировано Ferguss114 (23-10-2013 20:14:10)

Отсутствует

 

№45228-10-2013 19:48:22

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

Re: Greasemonkey

Почему этот код

Выделить код

Код:

if (document.location.hostname="my_host"){
function remove() {
links=document.getElementsByTagName('a');
for(var i=0; i<links.length; i++)
links[i].removeAttribute('href')
}

remove()
}

вызывает перезагрузку страницы?

Отсутствует

 

№45328-10-2013 20:25:31

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

Re: Greasemonkey

toxa
Может быть потому, что в первой строке кода
используется оператор присваивания [=]
вместо оператора проверки на равенство [==].

Отредактировано Dumby (28-10-2013 20:26:33)

Отсутствует

 

№45428-10-2013 21:59:56

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

Re: Greasemonkey

Точно! :dumb:

Отсутствует

 

№45506-11-2013 13:35:14

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

Re: Greasemonkey

Может кто-нибудь попробует помочь?:rolleyes:

Отсутствует

 

№45619-11-2013 13:56:06

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

Re: Greasemonkey

Почему здесь обработчик onclick срабатывает только один раз?

Отредактировано Ferguss114 (19-11-2013 13:59:32)

Отсутствует

 

№45719-11-2013 14:13:58

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

Re: Greasemonkey

Ferguss114
Потому что hasAttribute() проверяет наличие атрибута (и вызывается, кстати, неправильно).


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

Отсутствует

 

№45819-11-2013 16:58:57

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

Re: Greasemonkey

Я переделал hasAttribute() на getAttribute() и всё заработало.
Ещё пара вопросов: почему если в условии стоит else или else if то всё нормально, а если два независимых условия с  if — то не работает?

так работает

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

Выделить код

Код:

<htlm>
  
  <body>
    <div style="background-color:skyblue" id="mydiv1" onclick="changeColor()">DIV1 ---- кликнуть сюда для изменения цвета DIV2----</div>
    <br>
    <div style="background-color:red" id="mydiv2">DIV2</div>
    <script>
      function changeColor() {
        div = document.getElementById('mydiv2');

        if (div.getAttribute('style') == 'background-color:red') {
          div.setAttribute('style', 'background-color:yellow')
        } else {   // <<<<<<<<<<<<<<                                     
          div.setAttribute('style', 'background-color:red')   //  <<<<<<<<<<<<<<   
        }
      }
    </script>
  </body>
</htlm>


а так  нет
скрытый текст

Выделить код

Код:

<htlm>
  
  <body>
    <div style="background-color:skyblue" id="mydiv1" onclick="changeColor()">DIV1 ---- кликнуть сюда для изменения цвета DIV2----</div>
    <br>
    <div style="background-color:red" id="mydiv2">DIV2</div>
    <script>
      function changeColor() {
        div = document.getElementById('mydiv2');

        if (div.getAttribute('style') == 'background-color:red') {
          div.setAttribute('style', 'background-color:yellow')
        }
        if (div.getAttribute('style') != 'background-color:red')  {   // <<<<<<<<<<<<<<   
          div.setAttribute('style', 'background-color:red')    // <<<<<<<<<<<<<<
        }                                                                            
      }
    </script>
  </body>
</htlm>


И последнее: если я хочу передать event  в качестве аргумента, когда нужно писать полностью event, а когда достаточно е?
[firefox] вроде должен понимать е

Отредактировано Ferguss114 (19-11-2013 17:17:12)

Отсутствует

 

№45919-11-2013 17:30:02

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

Re: Greasemonkey

Ferguss114 пишет

а так  нет

Ну и что должно происходить, когда style='background-color:red' ?
getAttribute() возвращает текущее значение атрибута.

Ferguss114 пишет

И последнее: если я хочу передать event  в качестве аргумента, когда нужно писать полностью event, а когда достаточно е?

Выделить код

Код:

node.onclick = function(anything) {
    ...
};
node.addEventListener("click", function(anything) {
    ...
}, false);
node.setAttribute("onclick", "doSomething(event);");

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

Отсутствует

 

№46019-11-2013 20:11:52

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

Re: Greasemonkey

Ferguss114
Вариант:

Выделить код

Код:

(div.getAttribute('style') == 'background-color:red') 
? div.setAttribute('style', 'background-color:yellow')
: div.setAttribute('style', 'background-color:red');

Отсутствует

 

№46119-11-2013 20:32:56

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

Re: Greasemonkey

Infocatcher, bunda1
Спасибо :)

Отсутствует

 

№46212-12-2013 16:20:39

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

Re: Greasemonkey

Понравился скрипт Lights out any page for Greasemonkey, но вся его ценность для меня пропадает, из-за того что для его работы требуется разрешить Java Script. В связи с этим вопрос, можно ли как-то подправить данный скрипт, чтобы он работал и при запрещённых Java Script?

Отредактировано voqabuhe (12-12-2013 16:21:16)

Отсутствует

 

№46317-12-2013 01:54:24

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

Re: Greasemonkey

После обновления NoScript до v 2.6.8.8rc2 проблема исчезла

+ Enforce docShell-based script blocking for Gecko > 28

Отсутствует

 

№46402-01-2014 19:46:47

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

Re: Greasemonkey

Как сделать чтобы результат не был 0?
http://learn.javascript.ru/play/nBA8Sb

Отредактировано hartumov (02-01-2014 19:53:51)

Отсутствует

 

№46502-01-2014 20:19:46

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

Re: Greasemonkey

hartumov пишет

Как сделать чтобы результат не был 0?

Считывать данные из полей для ввода перед вычислением, а не при загрузке страницы.


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

Отсутствует

 

№46603-01-2014 00:07:43

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

Re: Greasemonkey

Infocatcher пишет

Считывать данные из полей для ввода перед вычислением, а не при загрузке страницы.

То есть присваивать данные из полей в переменные внутри функции getRes?

А если эти данные из полей ввода должны использоваться ещё и в другой функции? Как сделать чтоб она их увидела?
Объявлять x и y без var, чтобы они стали глобальными переменными и тогда будут доступны в любом месте скрипта?

Отсутствует

 

№46703-01-2014 00:17:19

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

Re: Greasemonkey

hartumov
Вот так, например: http://learn.javascript.ru/play/oxSYP


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

Отсутствует

 

№46803-01-2014 00:31:49

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

Re: Greasemonkey

Infocatcher
Спасибо! ;)

Отсутствует

 

№46903-01-2014 17:11:41

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

Re: Greasemonkey

Как сделать EventListener на загрузку этого окошка, чтобы по окончании загрузки в инпут вставился мой текст?

Выделить код

Код:

w=open('','', 'width=370,height=120');   
w.document.body.innerHTML="<center><p><input type='text size='10'></p></center>"

Отредактировано hartumov (03-01-2014 17:21:45)

Отсутствует

 

№47003-01-2014 19:53:46

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

Re: Greasemonkey

Ну это я для наглядности взял окошко, где кроме инпута больше ничего нет.
А вот пример из поста Infocatcher http://learn.javascript.ru/play/oxSYP — если  я хочу открыть его со вставленными из буфера числами, как быть? Ведь не реально в data впихнуть код целой страницы.
Или открыть локальный хтмл файл  в виде всплывающего окошка и тоже вставить в поля содержимое буфера, т.е. опять же надо дождаться окончания загрузки страницы.

А EventListener на загрузку всплывающего окна — это очень сложно?

Отсутствует

 

№47103-01-2014 21:18:46

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

Re: Greasemonkey

hartumov пишет

если  я хочу открыть его со вставленными из буфера числами, как быть?

Откуда открыть? У обычных страниц бедет доступ только к страницам с того же домена.
А так-то это просто:

Выделить код

Код:

var w=open(location.href, '', 'width=370,height=120');
w.addEventListener("load", function setup() {
    w.removeEventListener("load", setup, false);
    w.document.body.innerHTML="<center><p><input type='text size='10' value='1'></p></center>";
}, false);

Добавлено 03-01-2014 21:19:38
Ну, и блокировщик всплывающих окон придется временно отключить. :)
Или нужно делать кнопку, чтобы окно открывалось после клика.

Отредактировано Infocatcher (03-01-2014 21:19:38)


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

Отсутствует

 

№47204-01-2014 00:25:00

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

Re: Greasemonkey

Infocatcher
Я сохранил страничку с вашим "счётчиком" http://learn.javascript.ru/play/oxSYP
Теперь подставляю в код адрес локального файла

Выделить код

Код:

var w=open('file:///C:/Calc.html', '', 'width=370,height=120');
w.addEventListener("load", function setup() {
    w.removeEventListener("load", setup, false);
w.content.document.getElementsByTagName('input')[0].value='TEST';
}, false);

Текстовые поля я сделал пустыми. Теперь пытаюсь получить первый инпут и вставить в него строку 'TEST'. В идеале я хотел вставлять содержимое буфера, но пока хоть так.
Вот для этого мне и нужен был Listener. Но получить инпут (а хоть и любой элемент) внутри  функции я не могу.
Код я запускал из Keyconfig, если это важно. 

А с таймаутом да, работает, я ещё вчера пробовал. Вне этой функции - open() - можно свободно получить любой элемент. А изнутри - не выходит.
Но тогда этот EventListener не нужен, просто открываю окно, таймер через полторы секунды вставляет текст. Я думал с обработчиком лучше.
Или с обработчиком никак не выйдет?

Отсутствует

 

№47304-01-2014 01:07:35

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

Re: Greasemonkey

hartumov пишет

Код я запускал из Keyconfig, если это важно.

Да, важно, там совсем другое окно и совсем другая функция open(), которая возвращает ссылку на окно браузера, внутри которого уже находится окно со страницей (которая еще не загрузилась на момент загрузки окна браузера).

Можно сделать вот так:

Выделить код

Код:

var w = window.openDialog(
    "chrome://browser/content/",
    "_blank",
    "chrome,dialog=no,width=370,height=120",
    "file:///F:/test.html"
);
w.addEventListener("load", function setup(e) {
    w.removeEventListener(e.type, setup, false);
    //w.content.document.getElementsByTagName('input')[0].value='TEST';
    var browser = w.gBrowser.selectedBrowser;
    browser.addEventListener("load", function setupContent(e) {
        browser.removeEventListener("load", setupContent, true);
        //w.content.document.getElementsByTagName('input')[0].value='TEST';
        browser.contentDocument.getElementsByTagName('input')[0].value='TEST';
    }, true);
}, false);

Но зачем это нужно?

Добавлено 04-01-2014 01:11:28

hartumov пишет

В идеале я хотел вставлять содержимое буфера, но пока хоть так.

Казалось бы, что это все делает в теме про Greasemonkey. :)
Greasemonkey, кстати, вроде бы, только GM_setClipboard() умеет.

Но из расширений никаких ограничений нет, а в контексте главного окна браузера вообще доступна готовая функция readFromClipboard() из chrome://browser/content/browser.js.

Отредактировано Infocatcher (04-01-2014 01:11:28)


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

Отсутствует

 

№47406-01-2014 16:03:04

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

Re: Greasemonkey

okkamas_knife пишет

hartumov

в твоём случае можно сделать проще...

Я б не сказал, что этот вариант для меня проще. Я толком и не разобрался что там  к чему :rolleyes:

А вот вариант Infocatcher-а это как раз то что я и хотел. Работает как часы! :rock:

У меня возник еще вопрос по экранированию кавычек. Почему здесь обработчик онклик перестает работать если я экранирую двойные кавычки? http://learn.javascript.ru/play/LeSTEb

Именно здесь это не нужно, здесь используются разные их виды, но я хочу понять в чем причина.

Отсутствует

 

№47506-01-2014 18:20:09

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

Re: Greasemonkey

hartumov пишет

У меня возник еще вопрос по экранированию кавычек. Почему здесь обработчик онклик перестает работать если я экранирую двойные кавычки? http://learn.javascript.ru/play/LeSTEb

Именно здесь это не нужно, здесь используются разные их виды, но я хочу понять в чем причина.

В значениях атрибутов экранирование не работает, там можно только &quot; или &#39;/&apos; написать.
А экранировать надо при вот таком использовании:

Выделить код

Код:

document.getElementsByTagName("input")[0]
    .setAttribute(
        "onclick",
        "document.getElementsByTagName(\"textarea\")[0].value=\"test test test\""
    );

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

Отсутствует

 

Board footer

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