我希望用Greasemonkey在页面加载时更改javascript变量。
我要更改的变量是iDisplayLength
默认值为 25,我想在页面加载时将其更改为 -1。
这是我尝试过的脚本;它不起作用:
function changeTheDefaultViewVarLol() {
location.href = "javascript:void(windows.iDisplayLength = -1)";
};
changeTheDefaultViewVarLol();
编辑:从下面的评论中,目标页面 tf2spreadsheet.blogspot.com。
OP 实际上正在尝试更改页面上显示的行数 - 该函数由"显示 {x} 条目"<select>
下拉列表触发。
您只需使用:
unsafeWindow.iDisplayLength = -1;
不需要任何changeTheDefaultViewVarLol()
的东西。
但是,如果在页面将其设置为 25 之后,页面立即使用 iDisplayLength
,则这不会产生您想要的效果。
您可能需要调用 JS 函数才能应用新值。 如果是这种情况,则链接到目标页面。
更新其他页面信息:
您实际尝试做的是调用该页面的"显示所有条目"功能。
所以,不要从戳JS变量的角度来考虑,而要从激活与该<select>
相关的JS的角度来考虑。
对于类似于您指定的页面的普通页面,这样的代码可以做到这一点:
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);
}
但是,该页面在页面"加载"很久之后很久才在所需的表中使用AJAXes。 因此,需要一个额外的步骤,如下所示:
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);
}
}