Да, я понял что тупанул)
Увы, там 0. Запускал на обеих страницах |
Ну посмотри тогда вверх от нужно элемента встречается ли там в родителях iframe или frame, единожды или несколько раз, есть ли у него src?
|
Да, есть такой, и src тоже, detail.do?lang=ru, который является ссылкой на https://sm.mos.ru/sm/detail.do?lang=ru
![]() |
Эта ссылка выдает в отдельной вкладке вот эту часть основной страницы:
![]() причем в том состоянии, в котором она находится на основной странице, т.е. если я меняю значения на основной, и обновляю страницу по этой ссылке, то её содержимое меняется соответственно. |
(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(); }()) Попробуй так, но тут уж никаких гарантий... |
ВАУ!
![]() Спасибо большое) Вы волшебник) Подучу JS, заставлю это дело звуки издавать при появлении обращений) Это, кстати, возможно, именно звук воспроизводить? Если я правильно понимаю, принципе нужно сохранять состояние element в переменную, и в функции update сравнивать со старым, с вызовом отдельной функции при отличии. |
Да, моджно. HTML5 елемент audio.
Ток звуки надоедают. В своё время хорошо помогала засветка всего экрана красным/желтым на секунду.) Но это уж сами. Эксперементируйте в консоли, после чего уже добавляйте в рабочий код. |
Огромное спасибо!
С наступающим! (Или уже наступившим) Думаю можно закрывать) |
Цитата:
..upd Кстати поправил баг, старый результат в этой функции не сохранялся.)) |
А можно как-то заставить его прожимать на основной странице ту самую кнопку "Обновить"?
Я так понял нужно уже разбираться с simulateClick, и как местный интерфейс заставить с ним работать? |
Часовой пояс GMT +3, время: 09:12. |