-1

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

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

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

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

我想要获取 Mugging、House Burgary、Stoplight Car Theft 等文本

文本具有设置为银色的颜色属性。

看看我的代码,我在 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();

告诉我代码有什么问题。我会调整这段代码,如果我设法修复它,我会在这里再次报告。谢谢

4

3 回答 3

2

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

互联网上有很多 getElementsByClass 方法可用

于 2009-03-18T17:46:14.480 回答
1

+1 for ybo, your answer was spot on given the information available. I had a quick look at the relevant markup from the Mob Wars page, and it looks like this:

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

I modified your solution based on the actual markup to:

// ==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();
});
于 2009-06-15T20:41:53.953 回答
1

对 Perchik +1,如果您不提供您使用的函数的定义,以及它应该运行的 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();
于 2009-03-18T18:12:58.113 回答