请检查我的Javascript代码段。这是FB Mobwars的油脂脚本

时间:2009-03-18 17:16:10

标签: javascript greasemonkey

嘿伙计们,我正在通过开发greasemonkey脚本来练习我的Javascript编程,理论上它会改进我的javascript编码,因为它是原始的javascript。

所以现在,我正在为Mobwars facebook编写脚本。这是一个你杀人,偷东西,制造暴徒等等的游戏。

为了更好地理解这一点,这里是页面的屏幕:

alt text http://www.picamatic.com/show/2009/03/18/08/11/2877480_703x486.png 我要做的是扫描页面,获取作业名称并将其显示给用户。

我想获得文章Mugging,House Burglary,Stoplight Car Theft等等

文本的color属性设置为silver。

看看我的代码,我在Firebug中尝试了它,但它甚至没有警告......

var jobs = {};

jobs.scan = function() {
    var tagHolder = {};
    var availJobs = {};
    var jobContents = dom.get("app8743457343_content");
    var rData = dom.getElementsByClass(rowData, jobContents, "tr");
    for(var i = 0; i < rData.length; i++) {
        var rChildren = rData[i].childNodes;
        for(var j = 0; j < rChildren.length; j++) {
            if(rChildren[j].tagName === "B") {
                tagHolder.push(rChildren[j]);
            }
        }
        for(var k = 0; k < tagHolder.length; k++) {
            if (tagHolder[k].color == "silver") {
                availJobs.push(tagHolder[k].textContent);
            }
        }
    }
    return alert(availJobs[0]);
}

jobs.scan();

告诉我这段代码有什么问题。我只是调整一下这段代码,也许如果我设法修复它,就会再次在这里报告。感谢

3 个答案:

答案 0 :(得分:2)

你有自定义的“getElementsByClass”功能吗? DOM没有getElementsByClass方法。也许你试图从其他地方借用代码而没有意识到这一点?

互联网上有很多getElementsByClass方法

答案 1 :(得分:1)

+1 Perchik,如果你没有提供你使用的函数的定义,加上它应该运行的html,我们无法真正帮助你检查你的代码。

无论如何,我仍然看到两件你可以改变的事情。第一个是将数组初始化为数组,而不是空对象。如果您的变量不是数组,则无法使用push方法:

var tagHolder = new Array();
var availJobs = new Array();

第二个是使用jQuery或任何其他可以让您的生活更轻松的JavaScript库。在GreaseMonkey中,您可以使用@require

// ==UserScript==
// @name           Script Name
// @namespace      namespace
// @include        http://www.website.net/*
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js
// ==/UserScript==

当您将脚本添加到GreaseMonkey时,检索@required脚本:如果要使用它,则必须删除脚本并重新加载。然后,GreaseMonkey将保留@required脚本的本地副本,并在需要时加载它们。

使用jQuery,您的代码将如下所示:

var jobs = {};

jobs.scan = function() {
    var tagHolder = new Array();
    var availJobs = new Array();
    $("#app8743457343_content b").each(function() {
        tagHolder.push(this);
        if ($(this).attr("color") == "silver")
            availJobs.push($(this).text());
    });
    return alert(availJobs[0]);
}

jobs.scan();

答案 2 :(得分:1)

+1 ybo,鉴于可获得的信息,您的答案是现场。我快速浏览了一下Mob Wars页面中的相关标记,看起来像这样:

<div id="app8743457343_content" fbcontext="db6ca1f1773e">
 ...
   <b style="font-size: 15px; color: silver;">Mugging</b>
 ...

我根据实际标记将您的解决方案修改为:

// ==UserScript==
// @name          Mob Wars Job List
// @namespace     namespace
// @description   Script to summarise available Mob Wars jobs.
// @include       http://apps.facebook.com/mobwars/jobs/
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

$(document).ready(function() {
var jobs = {};
jobs.scan = function() {
    var availJobs = new Array();
    $("#app8743457343_content b").each(function() {
        if ($(this).css("color") == "silver")
            availJobs.push($(this).text());
    });
    return alert("Available jobs:\n" + availJobs.join('\n'));
}
jobs.scan();
});