2009-03-18 3 views
-1

Hé les gars, je pratique ma programmation Javascript en développant des scripts greasemonkey, théoriquement cela améliorerait mon code javascript parce que c'est du javascript brut.S'il vous plaît vérifier mon extrait Javascript. C'est un script greasemonkey pour FB Mobwars

Alors maintenant, je suis en train de coder un script pour Mobwars facebook. C'est un jeu où vous tuez des gens, voler étoffes, créer des foules, etc., etc.

Pour mieux comprendre, voici la screenie de la page:

alt text http://www.picamatic.com/show/2009/03/18/08/11/2877480_703x486.png Ce que je suis en train de faire est de scanner le page, et obtenez le nom du travail et affichez-le à l'utilisateur.

Je veux obtenir le texte Mugging, Maison Cambriolage, Stoplight vol de voiture etc etc

Le texte ont une propriété de couleur qui est fixé à l'argent.

Regardez mon code, je l'ai essayé dans Firebug mais il n'a même pas alerté ..

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(); 

juste me dire ce qui ne va pas avec le code .. Je vais juste tweak ce code et peut-être si J'ai réussi à le réparer, le signaler à nouveau ici. Merci

+0

je me suis dit pourquoi il n'a pas fonctionné !! En raison de la getElementsByClass .. Je dois passer une chaîne mais je n'ai pas encapsulé le rowData avec "" .. Quoi qu'il en soit, j'ai toujours des problèmes .. Im essayant de le résoudre man! Merci pour les précieux conseils les gars! –

Répondre

2

Avez-vous une fonction "getElementsByClass" personnalisée? DOM n'a pas de méthode getElementsByClass. Peut-être que vous essayiez d'emprunter du code ailleurs et que vous ne vous en êtes pas rendu compte?

Il y a beaucoup de méthodes getElementsByClass disponibles sur Internet

1

+1 à Perchik, si vous ne fournissez pas la définition des fonctions que vous utilisez, ainsi que le HTML, il est censé fonctionner, nous ne pouvons pas vraiment vous aider à vérifier votre code.

Quoi qu'il en soit, je vois encore deux choses que vous pouvez changer. La première consiste à initialiser vos tableaux sous la forme de tableaux, et non sous la forme d'objets vides. Vous ne pouvez pas utiliser la méthode push si votre variable est pas un tableau:

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

La seconde est d'utiliser jQuery ou tout autre librairie javascript qui peut rendre votre vie plus facile. En Greasemonkey, vous pouvez utiliser @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== 

Les @required scripts sont récupérés lorsque vous ajoutez votre script Greasemonkey: si vous voulez utiliser, vous devrez retirer votre script et le recharger. GreaseMonkey conservera alors une copie locale des scripts @required et les chargera si nécessaire.

Avec jQuery, votre code ressemblera alors que:

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(); 
+0

IC, je ne savais pas que je ne pouvais pas utiliser la méthode push si je n'utilisais pas le nouveau constructeur Array(). Mais n'est-ce pas un tableau aussi? var tableau = {}? Hey la partie requise est cool! Je ne savais même pas que ça existe. TY –

1

+1 pour YBO, votre réponse était sur place compte tenu des informations disponibles.J'ai eu un coup d'œil sur le balisage pertinent de la page Mob Wars, et il ressemble à ceci:

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

I modifié votre solution basée sur le balisage réel à:

// ==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(); 
}); 
Questions connexes