31.12.2017, 18:25
|
Интересующийся
|
|
Регистрация: 29.12.2017
Сообщений: 18
|
|
Да, я понял что тупанул)
Увы, там 0.
Запускал на обеих страницах
|
|
31.12.2017, 18:28
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,577
|
|
Ну посмотри тогда вверх от нужно элемента встречается ли там в родителях iframe или frame, единожды или несколько раз, есть ли у него src?
__________________
29375, 35
|
|
31.12.2017, 18:43
|
Интересующийся
|
|
Регистрация: 29.12.2017
Сообщений: 18
|
|
Эта ссылка выдает в отдельной вкладке вот эту часть основной страницы:
причем в том состоянии, в котором она находится на основной странице, т.е. если я меняю значения на основной, и обновляю страницу по этой ссылке, то её содержимое меняется соответственно.
|
|
31.12.2017, 19:06
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,577
|
|
(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.
|
|
31.12.2017, 19:18
|
Интересующийся
|
|
Регистрация: 29.12.2017
Сообщений: 18
|
|
ВАУ!
Спасибо большое) Вы волшебник)
Подучу JS, заставлю это дело звуки издавать при появлении обращений)
Это, кстати, возможно, именно звук воспроизводить?
Если я правильно понимаю, принципе нужно сохранять состояние element в переменную, и в функции update сравнивать со старым, с вызовом отдельной функции при отличии.
|
|
31.12.2017, 19:21
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,577
|
|
Да, моджно. HTML5 елемент audio.
Ток звуки надоедают. В своё время хорошо помогала засветка всего экрана красным/желтым на секунду.)
Но это уж сами. Эксперементируйте в консоли, после чего уже добавляйте в рабочий код.
__________________
29375, 35
|
|
31.12.2017, 19:23
|
Интересующийся
|
|
Регистрация: 29.12.2017
Сообщений: 18
|
|
Огромное спасибо!
С наступающим! (Или уже наступившим)
Думаю можно закрывать)
|
|
31.12.2017, 19:25
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,577
|
|
Сообщение от kirsan94
|
Если я правильно понимаю, принципе нужно сохранять состояние element в переменную, и в функции update сравнивать со старым, с вызовом отдельной функции при отличии.
|
Собсно оно и сейчас уже так делает(element.showHTML === html - сравнение нового со старым), и не обновляет если нет изменений. Вроде бы мелочь, но когда пытаешься скопировать а выделение постоянно сбрасывается - начинаешь думать от таких мелочах.)
..upd
Кстати поправил баг, старый результат в этой функции не сохранялся.))
__________________
29375, 35
|
|
31.12.2017, 19:27
|
Интересующийся
|
|
Регистрация: 29.12.2017
Сообщений: 18
|
|
А можно как-то заставить его прожимать на основной странице ту самую кнопку "Обновить"?
Я так понял нужно уже разбираться с simulateClick, и как местный интерфейс заставить с ним работать?
Последний раз редактировалось kirsan94, 31.12.2017 в 19:29.
|
|
|
|