首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当页面通过ajax更改时,我如何运行Greasemonkey脚本?

当页面通过ajax更改时,我如何运行Greasemonkey脚本?
EN

Stack Overflow用户
提问于 2012-06-14 23:36:14
回答 3查看 3.5K关注 0票数 1

我有这个脚本:

代码语言:javascript
运行
复制
// ==UserScript==
// @name     example
// @include  http://xxx*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// ==/UserScript==

var findElem = function(elems, text) {
    for (var i = 0; i < elems.length; i++) {
        if (elems[i].textContent == text) {
            return elems[i];
        } else {
            var result = findElem(elems[i].children, text);
            if (result != undefined) {
                return result;
            }
        }
    }
    return;
}

switch (document.getElementById('my_id').value) {
    case "1":
        findElem(document.documentElement.children, "blabla1").click();
        break;
    case "2":
        findElem(document.documentElement.children, "blabla2").click();
        break;
    case "3":
        findElem(document.documentElement.children, "blabla3").click();
        break;
    case "4":
        findElem(document.documentElement.children, "blabla4").click();
        break;
    default:
        break;
}

它工作得很好,但它只适用于主页加载。我想在页面通过ajax改变的时候运行这个。我该怎么做呢?

另外,请举例说明你的答案。我是新手。我不知道如何在你的答案中使用这些东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-14 23:39:52

由于浏览器的环境是事件驱动的,你必须设置一个计时器,绑定到你正在寻找的更新周围发生的一些事件。或者,您可以包装函数,该函数在post-hook中更新和调用代码。显然,您需要将用户脚本代码包装在某个函数中以便重用。

下面是一个使用setInterval设置计时器的示例(脚本的顶部仍然是一样的):

代码语言:javascript
运行
复制
setInterval(function(){
    switch (document.getElementById('my_id').value) {
        case "1":
            findElem(document.documentElement.children, "blabla1").click();
            break;
        case "2":
            findElem(document.documentElement.children, "blabla2").click();
            break;
        case "3":
            findElem(document.documentElement.children, "blabla3").click();
            break;
        case "4":
            findElem(document.documentElement.children, "blabla4").click();
            break;
        default:
            break;
    }
}, 1000) // if AJAX updates happen with some specific interval, set same number here to minimize useless work
票数 3
EN

Stack Overflow用户

发布于 2012-06-14 23:43:47

您可以使用mutation event handler在每次更改html时触发您的函数。然而,浏览器支持并不是最好的;)

票数 0
EN

Stack Overflow用户

发布于 2012-06-15 21:19:52

如果您的主机使用jQuery,则可以使用ajaxSuccessajaxComplete

代码语言:javascript
运行
复制
function mainCode(){
    // your script logic here ...
    switch (document.getElementById('my_id').value) {
        // truncated to save space
    }
}

$(document).ready(function(){
    mainCode();
    unsafeWindow.$(document).ajaxSuccess(function(e, xhr, opt) {
        mainCode();
    });
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11036542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档