Изменить переменную или активировать JS-связанный <select>выпадающий с Greasemonkey - PullRequest
2 голосов
/ 21 января 2012

Я хочу изменить переменную javascript при загрузке страницы с помощью Greasemonkey.

Переменная, которую я хочу изменить, равна iDisplayLength значение по умолчанию 25, я хочу изменить его на -1при загрузке страницы.

Это скрипт, который я пробовал;это не сработало:

function changeTheDefaultViewVarLol() {
  location.href = "javascript:void(windows.iDisplayLength = -1)";
};

changeTheDefaultViewVarLol();


Редактировать: Из комментария ниже, целевой страницей является tf2spreadsheet.blogspot.com .

ОП на самом деле пытается изменить количество строк, отображаемых на странице - функция, которая вызывается выпадающим списком "Показать {x}" <select>.

1 Ответ

1 голос
/ 21 января 2012

Вы бы просто использовали:

unsafeWindow.iDisplayLength = -1;

Нет необходимости в этом changeTheDefaultViewVarLol() материале.

Однако, это не даст желаемого эффекта, если iDisplayLength используется страницей сразу после того, как страница установит его на 25.

Возможно, вам придется вызвать функцию JS, чтобы применить новое значение. Ссылка на целевую страницу, если это так.



Обновление для дополнительной информации о странице:

Что вы на самом деле пытаетесь сделать, так это вызвать функцию «Показать все записи» на этой странице.

Итак, не думайте с точки зрения выбора переменных JS, думайте с точки зрения активации того, что JS связано с этим <select>.

Для обычной страницы, аналогичной той, которую вы указали , код такой будет делать это:

var showAllOpt  = document.querySelector ('#main_table_length select option[value="-1"]');
var changeEvent = document.createEvent ("HTMLEvents");

if (showAllOpt) {
    showAllOpt.parentNode.selectedIndex = showAllOpt.index;

    changeEvent.initEvent ("change", true, true);
    showAllOpt.parentNode.dispatchEvent (changeEvent);
}


НО, эта страница AJAX - в нужной таблице еще долго после того, как страница «загружается». Итак, необходим дополнительный шаг, например:

var showAllEntriesSelect = setInterval ( function() {
        setSelectValueWhenitLoads (
            "#main_table_length select option",
            "-1",
            showAllEntriesSelect
        );
    }
    , 200
);

function setSelectValueWhenitLoads (cssSelector, targetValue, timerVar) {

    var showAllOpt  = document.querySelector (
        cssSelector + '[value="' + targetValue + '"]'
    );

    if (showAllOpt) {
        clearInterval (timerVar);
        showAllOpt.parentNode.selectedIndex = showAllOpt.index;

        var changeEvent = document.createEvent ("HTMLEvents");
        changeEvent.initEvent ("change", true, true);
        showAllOpt.parentNode.dispatchEvent (changeEvent);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...