所以我要做的是使用Greasemonkey更改表的丢失列中的数据。
我遇到的问题是该网站的导航栏(总共有3个链接)使用JavaScript加载新页面(即URL不会更改),如果你去了另一个页面然后再回来,我已经做出的任何和所有更改都会丢失(因为代码不再运行)并且只有刷新修复它。
使用waitForKeyElements()
适用于第一页加载,但之后它会停止工作。为了测试它,我将.click
添加到.a
和.p
。单击第一个链接将其向上滑动(即正常工作),然后在此之后停止工作。与.p
部分相同。我是否必须将整个事物包裹在一个循环中?或者我应该设置一个每隔x秒执行一次脚本的计时器。
到目前为止我的代码
// ==UserScript==
// @name changetext
// @namespace changetext
// @include *
// @version 1
// @grant none
// @require http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// ==/UserScript==
$('p').click(function () {
$(this).slideUp();
});
$('a').click(function () {
$(this).slideUp();
});
waitForKeyElements ("#row", newdata());
function newdata()
{
document.getElementById("row").innerHTML = "<span class='text'>Test</span>";
}
答案 0 :(得分:2)
查看waitForKeyElements.js的来源:
function waitForKeyElements (
selectorTxt, /* Required: The jQuery selector string that
specifies the desired element(s).
*/
actionFunction, /* Required: The code to run when elements are
found. It is passed a jNode to the matched
element.
*/
bWaitOnce, /* Optional: If false, will continue to scan for
new elements even after the first match is
found.
*/
iframeSelector /* Optional: If set, identifies the iframe to
search.
*/
) { ... }
actionFunction
的描述强烈建议你应该传递一个函数,而不是函数执行的结果,即“在...时运行的代码”。
// GOOD - pass the function itself to serve as a callback
waitForKeyElements ("#row", newdata);
// BAD - calls the function once and passes the result (if any) of
// executing the function
waitForKeyElements ("#row", newdata());
你也可以把它写成:
waitForKeyElements ("#row", function() {
document.getElementById("row").innerHTML = "<span class='text'>Test</span>";
});
进一步观察,我认为您的选择器也存在问题。该脚本应该在添加时触发与指定选择器匹配的新元素。 但是,您有一个ID选择器,每个文档只能有一个ID。
尝试使用此类脚本代替:http://jsfiddle.net/Lh438/