2009-03-18 5 views
-1

안녕하세요, 저는 greasemonkey 스크립트를 개발하여 자바 스크립트 프로그래밍을 연습하고 있습니다. 이론적으로는 자바 스크립트 코딩이 원시 자바 스크립트로 향상 될 것입니다.제 자바 스크립트 스 니펫을 확인하십시오. FB Mobwars에 대한 greasemonkey 스크립트입니다.

이제 Mobwars Facebook 용 스크립트를 코딩하고 있습니다.

alt text http://www.picamatic.com/show/2009/03/18/08/11/2877480_703x486.png 난 할 노력하고있어하면을 검사하는 것입니다 : 그것은 당신이 군중을 만들고, 사람을 죽이고 물건을 훔치는 게임, 등 등

이 더 잘 이해하려면이다, 여기에 페이지의 screenie입니다 페이지를 열고 작업 이름을 가져 와서 사용자에게 표시하십시오.

나는

텍스트는 실버로 설정 색상 속성이 텍스트 습격, 집 강도질, 신호등 자동차 도난 등 등을 싶어. 난 그냥이 코드를 조정할 어쩌면 경우거야 .. 내 코드에서

봐, 내가 방화범을 시도했지만 그것도 그냥 코드에 문제가 있는지 말해 ..

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

을 경고하지 않습니다 나는 그것을 고칠 수 있었다, 병은 그것을 다시 여기에서보고한다. 감사합니다

+0

이유를 did not는 일한다!! 때문에 getElementsByClass .. 나는 문자열을 전달해야하지만 ""로 rowData를 캡슐화하지 않았습니다 .. 어쨌든, 여전히 문제가 .. 나는 그것을 해결하기 위해 노력하고 있습니다! 귀중한 도움말 녀석 주셔서 감사합니다! –

답변

2

맞춤 "getElementsByClass"기능이 있습니까? DOM에는 getElementsByClass 메소드가 없습니다. 아마 당신은 다른 곳에서 코드를 빌리려고했는데 이것을 깨닫지 못했을까요?

이 당신이 사용하는 기능의 정의를 제공하지 않을 경우 사용할 수 getElementsByClass 방법의 많음, 인터넷 Perchik에

1

일에있는 플러스 HTML이이에 실행하기로했다, 우리는 할 수 없습니다 정말로 코드를 확인하는 데 도움이됩니다.

어쨌든 변경할 수있는 두 가지 사항이 있습니다. 첫 번째는 배열을 빈 객체가 아닌 배열로 초기화하는 것입니다. 당신의 변수가 배열이 아닌 경우는 push 방법을 사용할 수 없습니다 :

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

두 번째는 jQuery를 또는 기타를 사용하는 것입니다 자바 스크립트, 여러분의 인생을 더 쉽게 만들 수 있습니다 라이브러리입니다. Greasemonkey와, 당신은 @require을 사용할 수 있습니다 : 당신이 그것을 사용하려는 경우, 당신은 당신의 스크립트를 제거하고 다시로드해야합니다 : 당신이 Greasemonkey와에 스크립트를 추가 할 때

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

@required 스크립트 를 검색합니다. GreaseMonkey는 @required 스크립트의 로컬 복사본을 보관하고 필요할 때로드합니다. jQuery로

, 코드를 다음처럼 보일 것이다 : YBO에 대한

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, 새로운 Array() 생성자를 사용하지 않으면 push 메서드를 사용할 수 없다는 것을 알지 못했습니다. 그러나 이것도 배열이 아닌가요? var array = {}? 필요한 부분은 멋집니다! 나는 그것이 존재하는지조차 몰랐다. 타이 –

1

+1, 당신의 답변이 주어진 정보에 자리했다.나는 마피아 전쟁 페이지에서 해당 마크 업을 간단히 살펴 있었는데, 그것은 다음과 같습니다 : 나는의 실제 마크 업을 기반으로 솔루션을 수정

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