Parsing 读取从HTTP请求创建的DOM中相对链接的href属性

Parsing 读取从HTTP请求创建的DOM中相对链接的href属性,parsing,google-chrome,dom,href,Parsing,Google Chrome,Dom,Href,在Chrome扩展中,我需要我的背景页面来检索HTML文档,并查看该文档中出现在特定锚标记中的文本。锚定标记没有ID属性,但可通过其href内容识别。为了与代码的其余部分保持一致,我希望通过根据XMLHttpRequest的结果创建的文档对象来检索此信息 我的问题是,当我在已创建的DOM上调用getElementsByTagName(“a”),然后搜索结果元素的href属性时,只有带有绝对URL的标记才会返回有效的href值,而带有相对URL的标记返回空href值。我需要找到的锚标记是带有相对U

在Chrome扩展中,我需要我的背景页面来检索HTML文档,并查看该文档中出现在特定锚标记中的文本。锚定标记没有ID属性,但可通过其href内容识别。为了与代码的其余部分保持一致,我希望通过根据XMLHttpRequest的结果创建的文档对象来检索此信息

我的问题是,当我在已创建的DOM上调用getElementsByTagName(“a”),然后搜索结果元素的href属性时,只有带有绝对URL的标记才会返回有效的href值,而带有相对URL的标记返回空href值。我需要找到的锚标记是带有相对URL的锚标记之一

下面是复制错误的最简单的代码形式。有没有人知道为什么会发生这种情况,或者如何编写修复程序,最好不要放弃DOM解析

function lookfor(linkContents, inURL) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function(data) {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                var doc = document.implementation.createHTMLDocument("");
                doc.documentElement.innerHTML = xhr.responseText;

                // Find Link in DOM of Document Created From HTTPRequest
                var found = -1;
                var links = doc.getElementsByTagName("a");
                console.log(links);
                for(var i = 0; i < links.length; i++) {
                    if (links[i].href) {
                        console.log(i + " " + links[i].href);
                        if (links[i].href.indexOf(linkContents) > -1) {
                            found = i;
                        }
                    }
                }
                if (found > -1) {
                    alert(links[found].innerHTML);
                }
            }
        }
    }
    xhr.open('GET', inURL, true);
    xhr.send();
}
函数查找(linkContents,inURL){
var xhr=new XMLHttpRequest();
xhr.onreadystatechange=函数(数据){
if(xhr.readyState==4){
如果(xhr.status==200){
var doc=document.implementation.createHTMLDocument(“”);
doc.documentElement.innerHTML=xhr.responseText;
//在从HTTPRequest创建的文档的DOM中查找链接
发现的var=-1;
var links=doc.getElementsByTagName(“a”);
控制台日志(链接);
对于(变量i=0;i-1){
发现=i;
}
}
}
如果(发现>-1){
警报(链接[found].innerHTML);
}
}
}
}
xhr.open('GET',inURL,true);
xhr.send();
}
[更新]

根据这个答案,我现在可以使用以下代码来解决这个问题:

函数getHref(锚定){
var href=
((新的XMLSerializer().serializeToString(锚定)| |“”)
.match(/href=(“[^”\s]+“|”[^”\s]+“|[^”\s]+)/i)|[“”])[0]
.replace(/(href=|'|“”)/ig“”)
;
如果(href!=“”)返回href;
}

有趣的是,它不适用于类型检查。相同的相对链接不会产生href值,也没有“锚定”类型。

您不喜欢使用jquery吗?我不喜欢仅为此添加jquery,但如果必须添加,我必须添加。
function getHref(anchor) {
    var href =
        ((new XMLSerializer().serializeToString(anchor) || "")
            .match(/href=("[^"'<>\s]+"|'[^"'<>\s]+'|[^"'<>\s]+)/i) || [""])[0]
                .replace(/(href=|'|")/ig, "")
    ;
    if (href != "") return href;
}