You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何处理XMLHttpRequest返回内容转DOM后调用evaluate时报的跨文档DOM异常

问题原因

你触发这个报错的核心原因是XPath查询的上下文节点和调用evaluate方法的文档对象不属于同一文档:
你通过DOMParser生成了新的DOM文档对象to_DOM,但是调用to_DOM.evaluate时,第二个参数传入的是当前脚本运行页面的document,两个文档对象不匹配,因此抛出跨文档节点调用的异常。

解决方法

只需要把evaluate方法的第二个参数替换为你新生成的DOM文档对象to_DOM即可,建议额外增加判空逻辑避免XPath匹配不到节点时抛出空指针异常,修改后的代码如下:

GM_xmlhttpRequest({
    method: "get",
    url: someurl,
    onload: function(responseDetails) {
        if(responseDetails.readyState == 4 && responseDetails.status == 200){
            var parser = new DOMParser()
            var to_DOM = parser.parseFromString(responseDetails.responseText, "text/html")
            // 第二个参数从原页面document改为新解析的to_DOM
            const xpathRes = to_DOM.evaluate("//tr[@bgcolor]/b[1]", to_DOM, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null)
            if (xpathRes.snapshotLength > 0) {
                alert(xpathRes.snapshotItem(0).innerText)
            }
        }
    }
})

注意事项

如果目标站点的HTML带有自定义XML命名空间,需要在evaluate的第三个参数传入命名空间解析函数处理,否则会出现匹配不到节点的问题。火狐浏览器对DOMParser解析text/html格式内容的兼容性良好,无需额外做兼容处理。

内容的提问来源于stack exchange,提问作者Peentje

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 03:09:03