使用greasemonkey加载和解析远程URL

时间:2010-02-06 00:31:24

标签: javascript url greasemonkey

如何编写Greasemonkey脚本,该脚本将通过URL列表(在同一个域中)并启用对生成的DOM执行XPath查询?

由于

2 个答案:

答案 0 :(得分:4)

对请求使用GM_xmlhttpRequest,为HTML解析使用createContextualFragment。有关使用createContextualFragment的示例,请参阅Best Addons for Greasemonkey。要解析有效的XML,您只需使用DOMParser.parseFromString即可。

编辑:这是一个非常简单但完整的例子,展示了一切如何融合在一起:

// ==UserScript==
// @name           Parse HTML demo
// @namespace
// @include        *
// ==/UserScript==

GM_xmlhttpRequest({
    method: 'GET',
    url: 'http://www.google.com',
    onload: function(resp){
    var range = document.createRange();
    range.setStartAfter(document.body);
    var xhr_frag = range.createContextualFragment(resp.responseText);
    var xhr_doc = document.implementation.createDocument(null, 'html', null);
    xhr_doc.adoptNode(xhr_frag);
    xhr_doc.documentElement.appendChild(xhr_frag);
    var node = xhr_doc.evaluate("//span//b[@class='gb1']", xhr_doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
    GM_log("node.localName: " + node.localName);
    GM_log("node.textContent: " + node.textContent);
    }
});

答案 1 :(得分:0)

如果你正在使用xml或写得很好的xhtml,你可以这样做:

// XMLDocument
var doc = new DOMParser().parseFromString(xhr.responseText, "text/xml");

否则:

// HTMLDocument
var doc = document.implementation.createHTMLDocument("");
doc.documentElement.innerHTML = xhr.responseText;

获得文档后,您可以像使用普通文档一样使用任何内容。