В userscript не срабатывает функция jQuery load()

186
28 июня 2018, 14:50

Пытаюсь создать свой первый userscript (Chrome + Violentmonkey).

Есть сайт со списком ссылок на другие страницы этого же сайта. На сайт можно зайти только с авторизацией(может быть это важно).

Пытаюсь в подсказки к ссылкам добавить текст со страниц куда они ссылаются. Но процесс застревает на функции load() (jquery-3.3.1), а точнее - ощущение что эта функция игнорируется - до и после неё код выполняется, она сама нет, и не выдаёт никаких сообщений, консоль ошибок пустая. Пробовал просто другую jQuery функцию - работает.

Где ошибка или ограничение? Как можно сделать по другому?

// ==UserScript==
// @name RTHelper
// @include https://site.ru/
// ==/UserScript==
// @require https://code.jquery.com/jquery-3.3.1.min.js
(function (window, undefined) {
    var w;
    if (typeof unsafeWindow != undefined) {
        w = unsafeWindow
    } else {
        w = window;
    }
    if (w.self != w.top) {
        return;
    }
    if (/https:\/\/site.ru/.test(w.location.href)) {
        jQuery(document).ready(function($){
            // Взять список элементов
            var listItems = document.getElementsByClassName('list-item');
            // Текущий url адрес
            var url = window.location.toString();
            // Тестировать только на первом элементе
            for (var i = 0; i < 1; i++) {
                var aElements = listItems[i].getElementsByTagName('a');
                var aElement = aElements[0];
                var itemUrl = url + aElement.getAttribute('href');
                // такая конструкция для отлова багов в функции загрузки
                var hMessages = $(".messagebody").load(itemUrl, function(response, status, xhr) {
                    if (status == "error") {
                      var msg = "Sorry but there was an error: ";
                      alert(msg + xhr.status + " " + xhr.statusText);
                    }
                    else { alert("ELSE!")
                    }
                });
                // Выдаёт 0
                alert(hMessages.length);
                // Тут начинаю подстановку подсказок
            };
        });
    };
}) (window);
Answer 1

Неправильное использование метода load (http://api.jquery.com/load/) Оказывается он добавляет в конкретный элемент текущей страницы, элемент с загружаемой страницы. Так в div c ID newdiv загружаем элемент с ID footer с адреса itemUrl.

$("#newdiv").load(itemUrl + ' #footer')

Я ожидал, что могу загрузить в переменную список загруженных элементов и работать с ними.

READ ALSO
Защита от флуда на JS

Защита от флуда на JS

пишу на телеграмм ботаХочу реализовать функцию защита от флуда

166
Как заполнить поля формы данными из массива?

Как заполнить поля формы данными из массива?

Есть форма и массивКак сделать, чтобы по щелчку по кнопке заполнилась форма соответственно ключам?

175
Событие onclick JS

Событие onclick JS

Говорю сразу - JS изучаю совсем недавно, ошибка может быть очень глупой Не работает событие onclick Фрагмент кода HTML:

145
Как правильно работать с формами и данными с сервера

Как правильно работать с формами и данными с сервера

Сейчас я получаю объект из базы, отображаю его свойства в формеПри изменении хотя бы одного поля, По клику на кнопку отправляю всю форму в виде...

155