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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№104-01-2014 09:38:30

inaugurator
Участник
 
Группа: Members
Зарегистрирован: 04-01-2014
Сообщений: 5
UA: Firefox 24.0

Не вызывается функция на событие

Привет всем неравнодушным.
Решил написать своё первое расширение. Споткнулся где-то в начале. Хочу, чтобы на событие "Нажатие на кнопку" вызывалась функция.
Имеется такой overlay:

Выделить код

Код:

<overlay id="test-overlay" xmlns:html="http://www.w3.org/1999/xhtml"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

    <toolbarpalette id="BrowserToolbarPalette">
        <toolbarbutton
        id="test-button"
        label="Test label"
        tooltiptext="Test tooltip"
        onclick='TestToolbar.buttonClick(event);'
        />
    </toolbarpalette>

    <script src='main.js' />
</overlay>

По какой причине даже alert не всплывает - не могу понять. Вроде все по образцу, как в самоучителе. Вот main.js:

Выделить код

Код:

var TestToolbar = {
    buttonClick: function(event){
    alert('All works!');
    var testbt = document.getElementById('test-button');
    testbt.setAttribute('tooltiptext', 'Changed');
  }
}

Кнопка есть, нажимается, а ничего не происходит. Где ошибка?

Ну а совсем неравнодушных спрошу вот  чего: как можно отследить событие перехода по ссылке? Хочу URL перехватить и изменить.
Спасибо.

Отсутствует

 

№204-01-2014 12:35:28

FBB
Участник
 
Группа: Members
Зарегистрирован: 19-07-2013
Сообщений: 23
UA: Firefox 26.0

Re: Не вызывается функция на событие

Нужно добавить прослушивателя события, что-то типа -

Выделить код

Код:

var testbt = document.getElementById('test-button');
 testbt.addEventListener("mousedown",YourFunc, false);

Где YourFunc -Ваша ф-ция.

Отсутствует

 

№304-01-2014 17:14:25

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

Re: Не вызывается функция на событие

FBB пишет

Нужно добавить прослушивателя события, что-то типа -

Выделить код

Код:

var testbt = document.getElementById('test-button');
 testbt.addEventListener("mousedown",YourFunc, false);

Где YourFunc -Ваша ф-ция.

Выделить код

Код:

testbt.addEventListener("mousedown", function(e) { alert('') }, false);

Я бы назвал это добавлением обработчика события.

Отсутствует

 

№405-01-2014 03:56:18

inaugurator
Участник
 
Группа: Members
Зарегистрирован: 04-01-2014
Сообщений: 5
UA: Firefox 26.0

Re: Не вызывается функция на событие

Наконец-то добрался до компьютера.
Спасибо FBB, bunda1!
Разобрался. Ява-скрипт имеет ̶о̶т̶с̶у̶т̶с̶т̶в̶и̶е̶ ̶п̶р̶а̶в̶и̶л̶  довольно странные правила расстановки точки с запятой. Хорошо об этом написано здесь:
http://habrahabr.ru/post/111563/
Пробовал добавлять addEventListener, а толку никакого. В моем случае этого делать не нужно, потому что обработчик события уже прописан в overlay:

Выделить код

Код:

onclick='TestToolbar.buttonClick(event);'

Непонятно почему в потоке скрипта alert('Test text'); и alert('Test text') одинаково работают, а если написать с точкой с запятой в теле функции , то не работает.
Осталось понять, как можно перехватить GET запрос и исправить?
А может быть прочитать содержимое адресной строки? Так даже лучше, пользователь видеть будет, что поменялось. Попробую найти, потом отпишусь.

Отсутствует

 

№505-01-2014 23:18:59

inaugurator
Участник
 
Группа: Members
Зарегистрирован: 04-01-2014
Сообщений: 5
UA: Firefox 26.0

Re: Не вызывается функция на событие

Всем привет! Собрал свое первое файрфокс расширение, ура-ура!
Теперь рутинные телодвижения превратились в один клик по красивой кнопочке + получил опыт обращения с ява-скриптом. Приятно:)
Оставлю памятку для себя и будущих поколений:
Для работы с адресом страницы можно пользоваться двумя способами:

Выделить код

Код:

var myLocation = window.content.document.location.href;

и

Выделить код

Код:

var urlBar = document.getElementById("urlbar").value;

Первый - здесь присваиваем переменной myLocation значение полного адреса открытой страницы в активной вкладке, второй - содержимое адресной строки в urlBar.
Значения могут различаться: например для пустой станицы первая переменная будет содержать «about:blank», а вторая - пустую строку.
Почему нужны и тот и этот:
Если в первом случае присвоить myLocation строку вида http://tra-ta.ta/page.php, то файрфокс перейдет по этой ссылке немедленно.
Во втором случае можно взять и изменить содержимое адресной строки с тем, чтобы оставить переход по ссылке на усмотрение пользователя. Мне пригодились оба способа.
Всем спасибо.

Отредактировано inaugurator (05-01-2014 23:23:29)

Отсутствует

 

№606-01-2014 02:17:26

inaugurator
Участник
 
Группа: Members
Зарегистрирован: 04-01-2014
Сообщений: 5
UA: Firefox 26.0

Re: Не вызывается функция на событие

okkamas_knife
Про Custom Button я знаю, только зачем ставить такой комбайнер ради одной очень специальной цели? Самому написать в тысячу раз интереснее.
А про то, что от версии к версии придумывают новые чудные правила - много недовольных разрабов.
Ну а если пользоваться больше решениями ява-скрипта, то вряд ли тут что-то может сильно поменяться. Должно работать и через 10 и 20 версий лисы;)

Отсутствует

 

№706-01-2014 04:00:38

inaugurator
Участник
 
Группа: Members
Зарегистрирован: 04-01-2014
Сообщений: 5
UA: Firefox 26.0

Re: Не вызывается функция на событие

Ну выкладывать я не собираюсь, уж слишком все просто и специфично.

okkamas_knife пишет

так что и не надейся что всё будет работать а готовься заранее

Если бы действительно было все так плохо, то давно бы расширения никто не писал. Ну поменяли ID - проблема что ли подправить пару строчек. Пока меня идеи файрфокса вполне устраивают.

Отсутствует

 

Board footer

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