2010-08-04 4 views
3

greasemonkey가있는 페이지를 검색 한 다음 링크를 추출하여 현재 페이지에 링크를 삽입하려고합니다. 나는 몇 가지 문제가 있어요 :GM_xmlhttpRequest를 사용하여 XML 가져 오기

GM_xmlhttpRequest({ 
method: "GET", 
url: "http://www.test.net/search.php?file=test", 

onload: function(data) 
{ 
    if (!data.responseXML) 
    { 
     data.responseXML = new DOMParser().parseFromString(data.responseText, "text/xml"); 
    } 
    alert("!"); 
    var xmldata = data.response.xml; 
    var tests = xmldata.getElementsByTagName('test'); 
    alert(tests[0].innerHTML); 
} 

}); 

페이지가 유효을, 내가 이전에 시도 할 때 GM_xmlhttpRequest는 문자열로 올바르게 반환,하지만 난 그게 내가 사용하는 방법을 알아낼 수 없습니다 그것에 대한 노드 조작. 미리 감사드립니다.

편집 - 나는 기능에 그것을 전달할 수 있도록 두 번째, 관련 질문

어떻게 내가 가져온 페이지를 통과하는 것처럼, 현재 페이지를 참조해야합니까? Ex

function FindTests(currentpage) 
{ 
    currentpage.getElementById('blah'); 
} 

처음에는 문서를 전달하지만 나중에 가져온 페이지를 사용합니다. 문구가 혼란 스럽다면 죄송합니다.

답변

2

요청한 페이지의 형식이 올바른 XML이면 올바른 방법입니다.
하지만 당신은 변경해야 data.response.xml

data.responseXML와 난 당신이 XMLDocument (XML 파서의 결과)이 할 수 없다고 생각 HTMLDocument에서 .getElementById 작품 때문이다.
그러나, 유효한 HTMLDocument의를 갖고 다음을 수행 할 수 :

if (/^Content-Type: text\/xml/m.test(data.responseHeaders)) { 
    data.responseXML = new DOMParser().parseFromString(data.responseText, "text/xml"); 
} 
else if (/^Content-Type: text\/html/m.test(data.responseHeaders)) { 
    var dt = document.implementation.createDocumentType("html", "-//W3C//DTD HTML 4.01 Transitional//EN", "http://www.w3.org/TR/html4/loose.dtd"); 
    var doc = document.implementation.createDocument(null, null, dt); 

    // I have to find a workaround because this technique makes the html*/head/body tags to disappear. 
    var html = document.createElement('html'); 
    html.innerHTML = data.responseText; 
    doc.appendChild(html); 

    data.responseXML = doc; 
} 

소스 : http://userscripts.org/scripts/review/56489

+0

덕분에, 지금은 잘 작동합니다. – Vcitric

관련 문제