1

所以我想做的是使用 Greasemonkey 更改表丢失列中的数据。

我遇到的问题是网站的导航栏(总共有 3 个链接)使用 JavaScript 来加载新页面(即 URL 不会改变),如果你转到不同的页面然后又回来,任何和所有我已经做出的更改会丢失(因为代码不会再次运行),只有刷新才能修复它。在第一页加载时使用waitForKeyElements()作品,但在那之后它停止工作。为了测试它,我添加.click.aand .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>";
}
4

1 回答 1

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强烈建议你应该传递一个函数,而不是函数执行的结果,即“The code to run when...”。

// 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/

于 2013-04-29T23:50:35.910 回答