Greasemonkey에서 동기식 Ajax 호출을 만드는 방법은 무엇입니까?
-
16-09-2020 - |
문제
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
func2
및 func3
스크립트 전체에서 재사용 할 수 있어야하며, 이들 각각은 각각의 스크립트의 다른 부분에서 독립적으로 또는 함께 사용할 수 있습니다.
해결책
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의 응답 처리기의 내부에 전화를 걸면 즉시 반환하고 해당 페이지를 얻을 때 필수 코드를 실행합니다.
특정 순서로 정말로 수행 해야하는 경우 첫 번째 호출에 대한 반환을 할 수 있습니다.