Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Сделал скрипт, не работает полностью через tampermonkey (https://javascript.ru/forum/dom-window/74857-sdelal-skript-ne-rabotaet-polnostyu-cherez-tampermonkey.html)

Wolterhon 12.08.2018 19:10

Сделал скрипт, не работает полностью через tampermonkey
 
Значит, сделал я юзерскрипт, проблема вот в чём: если вставлять скрипт через консоль, то он работает нормально, а если через Tampermonkey, то он вроде как работает, но когда выбираю какой-нибудь пункт из выпадающего списка, ничего не происходит. А должен добавляться текст в textarea. Если вставлять через консоль, то работает. Вот скрипт:
var replyarea = document.getElementsByClassName("forumtopic_reply_textarea");
var replyareael = replyarea[0];

function addtext(text) {
    replyareael.value += text;
}

var textareaforum = document.getElementsByClassName("commentthread_entry_autosubscribe");
var textareaforumel = textareaforum[0];

textareaforumel.innerHTML += "<select onchange='addtext(this.options[this.selectedIndex].value)'><option value=''></option><option value='1'>Аккаунт</option><option value='2' selected>Ключ</option></select>";


UPD: Я узнал ошибку, ругается на то, что не обозначена функция addtext. Я убрал функцию, начало ругаться на то, что не обозначена переменная... Что за бред?

j0hnik 13.08.2018 00:43

скорее всего сайт подгружает часть контента аяксом

самый простой костыль, обернуть в
setTimeout(function(){
//ваш код
},2000);

Wolterhon 13.08.2018 08:42

Сделал, всё равно втирает, что функция не обозначена.

Aetae 13.08.2018 10:21

textareaforumel.innerHTML +=
Так делать нельзя ни в коенм случае(и в обычном коде тоже). a+=b это на самом деле a=a+b, т.е. таким образом в переписываете весь предыдущий код заново, сбрасывая на ноль любые обработчики в нём присутствующие.
Но проблема не в этом.)
Код в юзер скриптах находится на отдельном "уровне" и обычно(есть варианты) напрямую к ним из страницы обращаться нельзя.
Делать надо примерно так:
var replyarea = document.getElementsByClassName("forumtopic_reply_textarea");
var replyareael = replyarea[0];

function addtext(text) {
    replyareael.value += text;
}

var textareaforum = document.getElementsByClassName("commentthread_entry_autosubscribe");
var textareaforumel = textareaforum[0];

var select = document.createElement('select');
select.onchange = function(){
  addtext(this.options[this.selectedIndex].value);
};
var option = select.appendChild(document.createElement('option'));
option.value = '';

option = select.appendChild(document.createElement('option'));
option.value = '1';
option.innerHTML = 'Аккаунт';

option = select.appendChild(document.createElement('option'));
option.value = '2';
option.innerHTML = 'Ключ';

textareaforumel.appendChild(select);
Т.е сохраняя все связи внутри скрипта,а не преобразуя в текст и добавляя на страницу.

Wolterhon 13.08.2018 11:03

Огромное спасибо!


Часовой пояс GMT +3, время: 09:37.