Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 31.12.2017, 18:25
Интересующийся
Отправить личное сообщение для kirsan94 Посмотреть профиль Найти все сообщения от kirsan94
 
Регистрация: 29.12.2017
Сообщений: 18

Да, я понял что тупанул)
Увы, там 0.
Запускал на обеих страницах
Ответить с цитированием
  #12 (permalink)  
Старый 31.12.2017, 18:28
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Ну посмотри тогда вверх от нужно элемента встречается ли там в родителях iframe или frame, единожды или несколько раз, есть ли у него src?
__________________
29375, 35
Ответить с цитированием
  #13 (permalink)  
Старый 31.12.2017, 18:33
Интересующийся
Отправить личное сообщение для kirsan94 Посмотреть профиль Найти все сообщения от kirsan94
 
Регистрация: 29.12.2017
Сообщений: 18

Да, есть такой, и src тоже, detail.do?lang=ru, который является ссылкой на https://sm.mos.ru/sm/detail.do?lang=ru
Ответить с цитированием
  #14 (permalink)  
Старый 31.12.2017, 18:43
Интересующийся
Отправить личное сообщение для kirsan94 Посмотреть профиль Найти все сообщения от kirsan94
 
Регистрация: 29.12.2017
Сообщений: 18

Эта ссылка выдает в отдельной вкладке вот эту часть основной страницы:

причем в том состоянии, в котором она находится на основной странице, т.е. если я меняю значения на основной, и обновляю страницу по этой ссылке, то её содержимое меняется соответственно.
Ответить с цитированием
  #15 (permalink)  
Старый 31.12.2017, 19:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

(function(){
  var w = window.open('', 'monitoring_window');
  w.document.open();
  w.document.write(`<!DOCTYPE html>
  <html>
  <head>
    <title>monitor</title>
    <style>
      #error{
        background:red;
        color:white;
      }
      /* здесь придётся добавить стилей для нормального отображения результата */
    </style>
  </head>
  <body>
  <div id="error"></div>
  <div id="result"></div>
  <script>
    var buttonPressInterval = 5 * 60 * 1000; /* интервал повтора нажатия в мс */
    var contentUpdateInperval = 1000; /* интервал обновления данных */
    var errorElement = document.getElementById('error'); /* сюда выводим ошибки */
    var resultElement = document.getElementById('result');  /* сюда выводим результат */
 
    var buttonSelector = 'button[aria-label="Обновить"]'; /* селектор для кнопки */
    var contentSelector = '.x-grid3-body'; /* селектор для нужного */
 
    var lastButtonPress = 0;
	
	function querySelectorAnyFrame(window, selector){
	  var element;
	  if(element = window.document.querySelector(selector)) 
		return element;
      for(var i = window.frames.length, element; i--;){
        try{
          if(element = window.frames[i].document.querySelector(selector)){
            return element
          }
        }catch(e){}
      }
    }
 
    function simulateClick(window) {
      /*
        Имитация нажатия, поднятия и клика,
        неизвестно на что именно прописано событие конкретно у вас,
        можно поэксперементировать и убрать лишнее.
      */
      var button = window.document.querySelector(buttonSelector);
      if(!button) return false;
       
      var event = window.MouseEvent, options = {
        bubbles: true,
        cancelable: true,
        view: window
      };
 
      button.dispatchEvent(new event('mousedown', options));
      button.dispatchEvent(new event('mouseup', options));
      button.dispatchEvent(new event('click', options));
      return true;
    }
 
    function show(html, element){
      if(element.showHTML === html) return false;
      element.showHTML = element.innerHTML = html;
    }
 
    (function update(){
      try{
        var element = querySelectorAnyFrame(opener, contentSelector);
        if(element){
          show(element.innerHTML, resultElement);
        } 
      }catch(e){
        return show(
          'Потеряна связь с главной страницей, перезапустите букмарклет.',
          errorElement
        );
      }
       
      if(new Date() - lastButtonPress >= buttonPressInterval){
        show(
          simulateClick(opener) ? '' : 'Не найдена кнопка обновления.',
          errorElement
        );
        lastButtonPress = new Date().getTime();
      }
       
      setTimeout(update, contentUpdateInperval)
    }());
  </script>
  </body>
  <html>`);
  w.document.close();
}())

Попробуй так, но тут уж никаких гарантий...
__________________
29375, 35

Последний раз редактировалось Aetae, 31.12.2017 в 19:28.
Ответить с цитированием
  #16 (permalink)  
Старый 31.12.2017, 19:18
Интересующийся
Отправить личное сообщение для kirsan94 Посмотреть профиль Найти все сообщения от kirsan94
 
Регистрация: 29.12.2017
Сообщений: 18

ВАУ!

Спасибо большое) Вы волшебник)
Подучу JS, заставлю это дело звуки издавать при появлении обращений)
Это, кстати, возможно, именно звук воспроизводить?
Если я правильно понимаю, принципе нужно сохранять состояние element в переменную, и в функции update сравнивать со старым, с вызовом отдельной функции при отличии.
Ответить с цитированием
  #17 (permalink)  
Старый 31.12.2017, 19:21
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Да, моджно. HTML5 елемент audio.
Ток звуки надоедают. В своё время хорошо помогала засветка всего экрана красным/желтым на секунду.)
Но это уж сами. Эксперементируйте в консоли, после чего уже добавляйте в рабочий код.
__________________
29375, 35
Ответить с цитированием
  #18 (permalink)  
Старый 31.12.2017, 19:23
Интересующийся
Отправить личное сообщение для kirsan94 Посмотреть профиль Найти все сообщения от kirsan94
 
Регистрация: 29.12.2017
Сообщений: 18

Огромное спасибо!
С наступающим! (Или уже наступившим)
Думаю можно закрывать)
Ответить с цитированием
  #19 (permalink)  
Старый 31.12.2017, 19:25
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Сообщение от kirsan94 Посмотреть сообщение
Если я правильно понимаю, принципе нужно сохранять состояние element в переменную, и в функции update сравнивать со старым, с вызовом отдельной функции при отличии.
Собсно оно и сейчас уже так делает(element.showHTML === html - сравнение нового со старым), и не обновляет если нет изменений. Вроде бы мелочь, но когда пытаешься скопировать а выделение постоянно сбрасывается - начинаешь думать от таких мелочах.)

..upd
Кстати поправил баг, старый результат в этой функции не сохранялся.))
__________________
29375, 35
Ответить с цитированием
  #20 (permalink)  
Старый 31.12.2017, 19:27
Интересующийся
Отправить личное сообщение для kirsan94 Посмотреть профиль Найти все сообщения от kirsan94
 
Регистрация: 29.12.2017
Сообщений: 18

А можно как-то заставить его прожимать на основной странице ту самую кнопку "Обновить"?
Я так понял нужно уже разбираться с simulateClick, и как местный интерфейс заставить с ним работать?

Последний раз редактировалось kirsan94, 31.12.2017 в 19:29.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться в Chrome Extension инжекция кода в страницу karanak Javascript под браузер 1 15.09.2015 16:04
Chrome devTools и просмотр кода страницы выдают разное содержание T-Mark Общие вопросы Javascript 6 24.03.2011 23:03