На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ElcnU, ANDLL, fatalist
  
> Чтение обработчика "onclick"
    Пишу расширение для Хрома, для внутреннего использования.

    Микрозадача: кликнуть одну из кнопок на странице левого сайта. Ее код:

    ExpandedWrap disabled
      <button class="flat_button" onclick="return GroupsEdit.addBlacklist()">Добавить в чёрный список</button>


    Нужно ее как минимум идентифицировать среди более других. Класс у всех один, различается onclick и текст.

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

    ExpandedWrap disabled
        
        var ABL = document.getElementsByClassName('flat_button');
          console.log("Flat buttons:" + ABL.length);
          for (var i = 0; i < ABL.length; i++){
            console.log("Button [" + i + "]");
            console.log(ABL[i].innerText);
            if(ABL[i].onclick) console.log(ABL[i].onclick.toString());
            if(ABL[i].onclick && ABL[i].onclick.toString() == "return GroupsEdit.addBlacklist()")
              ABL[i].click();
        }
      }


    Если я вставляю свою кнопку перед этой:

    ExpandedWrap disabled
        
      var btn = document.createElement('button');
        btn.className = "flat_button";
        btn.innerHTML = "Моя кнопочка";
        btn.onclick = myAlert;
       
      var v = document.getElementsByClassName('page_block_header_extra _header_extra');
       
      if(v.length == 1){
        v[0].insertBefore(btn, null);
      }


    То для нее обработчик в предыдущем цикле логгируется.
    Цитата

    testloader.js:159 Flat buttons:2
    testloader.js:161 Button [0]
    testloader.js:162 Добавить в чёрный список
    testloader.js:161 Button [1]
    testloader.js:162 Моя кнопочка
    testloader.js:163 function myAlert(){
    alert("Some funny!");
    }


    Что делать?
    Сообщение отредактировано: barazuk -
      И еще простой (наверное) вопрос.

      Как тупо послать элементу нажатие клавиши???

      ExpandedWrap disabled
        <input type="text" class="ui_search_field _field" id="sb_search_b057d4b7" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Поиск по подписчикам">


      Дебилы сделали старт поиска тупо по нажатию Enter в этом текстовом поле. Другим способом пока не вкурил как можно сделать.

      Слал клик - не реагирует, формы вокруг вообще нет - так что сабмит некому делать, метода созвучного с "нажать на кнопку" не вижу ни в классе элемента, ни ХТМЛэлемента, на в окне, ни в документе.

      Где????
        Цитата barazuk @
        на странице левого сайта

        а как твой скрипт привязан к "левому" document....?

        Цитата barazuk @
        Нужно ее как минимум идентифицировать среди более других

        по родительским тегам, по соседним элементам, по расположению в document.getElementsByClassName('flat_button');, по цепочке всего дерева от body

        Цитата barazuk @
        То для нее обработчик в предыдущем цикле логгируется

        :scratch: не могу лог понять... что было нажато и кто такие document.getElementsByClassName('page_block_header_extra _header_extra'); ?

        Цитата barazuk @
        Где????

        раз ни формы ни onclick нету, тогда наверно слушатель событий покопать надо... Хотя нет, в тырнете ни чё такого не нашёл.. :-?
          Цитата K313 @
          а как твой скрипт привязан к "левому" document....?


          Как обычно, это же расширение Хрома. Скрипт подгружен на "чужую" страницу.

          Цитата K313 @
          по родительским тегам, по соседним элементам


          Кнопки отличаются только текстом и обработчиком. Порядок и число их может меняться в зависимости от ситуации. Родительский элемент у всех один. А надо как-то различить, чтобы не то не кликнуть.

          Добавлено
          Цитата K313 @
          не могу лог понять... что было нажато и кто такие document.getElementsByClassName('page_block_header_extra _header_extra'); ?


          Для ясности.

          Если так:

          ExpandedWrap disabled
            var ABL = document.getElementsByClassName('flat_button');
                console.log("Flat buttons:" + ABL.length);
                for (var i = 0; i < ABL.length; i++){
                  console.log("Button [" + i + "]");
                  console.log(ABL[i].innerText);
                  if(ABL[i].onclick) console.log(ABL[i].onclick.toString());
                  if(ABL[i].onclick && ABL[i].onclick.toString() == "return GroupsEdit.addBlacklist()")
                    ABL[i].click();
              }
            }


          Лог выглядит так:
          Цитата
          testloader.js:159 Flat buttons:1
          testloader.js:161 Button [0]
          testloader.js:162 Добавить в чёрный список


          Если я вставляю свою кнопку перед этой:


          ExpandedWrap disabled
            var btn = document.createElement('button');
              btn.className = "flat_button";
              btn.innerHTML = "Моя кнопочка";
              btn.onclick = myAlert;
             
            var v = document.getElementsByClassName('page_block_header_extra _header_extra');
             
            if(v.length == 1){
              v[0].insertBefore(btn, null);
            }
             
            var ABL = document.getElementsByClassName('flat_button');
                console.log("Flat buttons:" + ABL.length);
                for (var i = 0; i < ABL.length; i++){
                  console.log("Button [" + i + "]");
                  console.log(ABL[i].innerText);
                  if(ABL[i].onclick) console.log(ABL[i].onclick.toString());
                  if(ABL[i].onclick && ABL[i].onclick.toString() == "return GroupsEdit.addBlacklist()")
                    ABL[i].click();
              }
            }


          То лог такой (и обработчик выдирается):

          Цитата
          testloader.js:159 Flat buttons:2
          testloader.js:161 Button [0]
          testloader.js:162 Добавить в чёрный список
          testloader.js:161 Button [1]
          testloader.js:162 Моя кнопочка
          testloader.js:163 function myAlert(){
          alert("Some funny!");
          }


          'page_block_header_extra _header_extra' - родитель кнопки, к вопросу отношения не имеет, он находится легко.

          Судя по твоим вопросам, ты вообще в расширениях не шаришь?
            Цитата barazuk @
            Судя по твоим вопросам, ты вообще в расширениях не шаришь?
            :crazy: в расширениях наверно нет...

            ExpandedWrap disabled
              v[0].insertBefore(btn, null);
            попробуй вместо null задать элемент, перед которым хочешь вставить свою кнопку
              Цитата K313 @
              попробуй вместо null задать элемент, перед которым хочешь вставить свою кнопку


              Зачем??? Кнопка итак вставляется куда надо. Ты вообще уловил, в чем проблема?
                Цитата barazuk @
                Зачем??? Кнопка итак вставляется куда надо.
                действительно, зачем ?! :crazy: это у меня заклинило просто
                Цитата barazuk @
                Если я вставляю свою кнопку перед этой:


                Цитата barazuk @
                Ты вообще уловил, в чем проблема?
                думаю, идентифицировать нужную тебе кнопочку ( и вторая - не обрабатывается послка click на ту кнопочку ) :scratch:


                ну если так подумать то, не обрабатывается посылка click, может потому что его там уже и нету вовсе?.... Тогда наверно по той же причине ты и не можешь идентифицировать её по тексту в onclick?...

                Если так, то видимо кто-то ещё до тебя перебрасывает код onclick в eventlistener, а текст onclick затирает... Если так, значит тебе нужно успеть раньше него (я не знаю в какой момент подключаются расширения хрома)
                  вот ты где! :hunter: :D
                    Цитата Cfon @
                    вот ты где!
                    а чё?! :D человек вон скучает, ни кто ему не помогает... :whistle:
                      Цитата K313 @
                      eventlistener


                      При отладке ничего не вижу.

                      Цитата K313 @
                      не обрабатывается послка click на ту кнопочку


                      Обрабатывается. Но ищу по тексту на кнопке. И меня от такого хардкода передергивает.

                      Чтение обработчика "onclick" (сообщение #3732537)

                      А тут вопрос уже вообще по другому месту. Я вообще не могу понять, как оно работает. Формы там нет. Никаких обработчиков не вижу. Поиск стартует по нажатию на Enter, когда курсор в этом инпуте. Но как??? И как это симулировать?
                        Цитата barazuk @
                        А тут вопрос уже вообще по другому месту.
                        :wacko: а, это у тебя разные кнопочки,.. вернее инпут... Ну а какой тогда смысл слать ему click? если это тип text и он на Enter настроен, ты ему keyDown или keyUp слать наверное должен?! и там если умники isTrusted проверяют, то ты наверно всё равно не сможешь ни чего отправить... В общем тебе к Google думаю :wall:

                        А по первому вопросу - или попробуй пораньше влезть или ещё может получиться метод GroupsEdit.addBlacklist() перегрузить своим? раз ты знаешь его имя...
                          Цитата K313 @
                          GroupsEdit.addBlacklist() перегрузить своим?


                          Зачем???

                          Цитата K313 @
                          Ну а какой тогда смысл слать ему click? если это тип text и он на Enter настроен, ты ему keyDown или keyUp слать наверное должен?!


                          Не проходит. Единственное, шо нарыл через Гугель - симуляция через JQuery. Но оно походу работает снова таки только для "своих" страниц и обработчиков.

                          ExpandedWrap disabled
                            <input type="text" class="ui_search_field _field" id="sb_search_b057d4b7" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" placeholder="Поиск по подписчикам">


                          ExpandedWrap disabled
                              var v = document.getElementsByClassName('ui_search_field _field');
                              for (var i = 0; i < v.length; i++){
                                console.log(i + ". " + v[i].id);
                                if(v[i].placeholder=="Поиск по подписчикам"){
                                  v[i].value = "http://vk.com/id112208";
                                  v[i].focus();
                                  v[i].click();
                             
                                  var e1 = $.Event("keydown", { keyCode: 13 });
                                  var srch = $(v[i]);
                                  if(srch.length) srch.trigger(e1);
                             
                                  v[i].submit(); // ну а тут тупо матерится что низзя :)
                                  break;
                                }
                              }
                            Цитата barazuk @
                            Зачем???
                            что бы перехватить...


                            Цитата barazuk @
                            v[i].submit(); // ну а тут тупо матерится что низзя :)
                            я в квери тоже не шарю, мне пока голого яваскрипт хватало :whistle:
                            Цитата barazuk @
                            Слал клик - не реагирует, формы вокруг вообще нет - так что сабмит некому делать,
                              Цитата K313 @
                              что бы перехватить...


                              И дальше что? Мои скрипты не видят оригинальные скрипты страницы и не могут их вызвать.

                              В противном случае мне бы вообще не нужно было к кнопкам цепляться - просто обработчик бы вызвал.
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0517 ]   [ 16 queries used ]   [ Generated: 29.03.24, 14:23 GMT ]