문제

URL 목록이 있고 각 페이지를 다른 페이지로로드해야합니다.

이것은 제가 내 마음 속에있는 내 주요 기능입니다.

mainFunction() {  
loop {  // Loop through URL list
oPage = func1(URL); //Get page contents
aResult = func2(oPage); //Analyse the contents
func3(aResult); //Do current page modifications
}  
}
.

func1는 비동기식 인 GM_xmlHttpRequest를 사용하므로 페이지 내용을 검색하기 전에 "underfined '의'underfined '의 opage 결과가 끝납니다.
func2는 또한 GM_xmlHttpRequest를 사용하므로 unpage가 정의되지 않은 경우에도 아직 Aresult도 정의되지 않습니다.

모든 작업을 수행하는 방법에 대한 아이디어가 있습니까?

func1 func2func3 스크립트 전체에서 재사용 할 수 있어야하며, 이들 각각은 각각의 스크립트의 다른 부분에서 독립적으로 또는 함께 사용할 수 있습니다.

도움이 되었습니까?

해결책

var urls = [];

(function recursive(list)
{
    if (list[0])    // the list is not empty
    GM_xmlhttpRequest({ // that would be "func1"
        "url" : list[0],    // first url in the list
        "onload" : function(xhr)
        {
            var oPage = xhr.responseText,   // page contents
            aResult = func2(oPage); // analyse the contents
            func3(aResult); // do current page modifications

            list.shift();   // remove the first link of the list
            recursive(list);    // go to the next url in the list
        }
    });
    else
    alert("end of list");
})(urls);
.

은 그것을 테스트하지 않았지만 아이디어를 얻었습니다

다른 팁

GreasemonKey 특정 기능을 사용해야하는 이유가 있습니까?당신은 교차 사이트 요청이나 특별히 그것을 요구하는 것을하고 있습니까? Greasemonkey의 경우 asynchronous를 false로 설정하는 옵션을 찾을 수 없습니다.

가장 쉽게 옵션은 jquery jQuerys ajax 기능을 사용하는 것입니다.ofcourse는 jQuery없이 수행 할 수 있지만,이 영역의 크로스 브라우저 비 호환성은 수동으로 처리 할 수있는 고통입니다.

jQuery를 사용하여 코드는 다음과 같이 보일 것입니다 :

function func1(url) {
    var result;

    $.ajax({
        type: "GET",
        url: url,
        async: false,
        success: function(data){
            result = data;
        }
    });
    return result;
}
.

다음과 같이 변수 oPage를 선언합니다.

var oPage = func1(url);
.

나머지는 자신을 알아낼 수 있다고 생각합니다.

일반적으로 XMLHTTPREquest의 응답 처리기의 내부에 전화를 걸면 즉시 반환하고 해당 페이지를 얻을 때 필수 코드를 실행합니다.

특정 순서로 정말로 수행 해야하는 경우 첫 번째 호출에 대한 반환을 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top