Показать сообщение отдельно
  #4 (permalink)  
Старый 31.12.2017, 16:58
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,577

Это печально.
Приложение написано на ExtJS - овермайндном корпоративном бегемоте, "простенько" с ним нифига не сделаешь.

Вот накидал букмарклет который теоретически должен делать то что надо, но если там ещё и сложная структура вложенных фреймов, то без прямого доступа до той страницы уже ничего не поделаешь:
(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 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.innerHTML = html;
    }

    (function update(){
      try{
        var element = opener.document.querySelector(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();
}())


На всякий случай, букмарклет работает так: создаёте на панели закладку, в поле адрес пишете "javascript:" после чего вставляете вышеприведённый код. Далее заходите на нужную страницу и кликаете по созданной закладке.
__________________
29375, 35

Последний раз редактировалось Aetae, 31.12.2017 в 17:16.
Ответить с цитированием