我正在开发chrome扩展程序,对这个领域来说相对较新。我目前正在处理的项目要求我的扩展程序扫描当前“网站”上的所有“网页”(即当前在浏览器的活动选项卡中打开的网站)。我需要从网站上获取并打印所有出站链接的列表(而不仅仅是当前打开的网页)。
到目前为止的进展:到目前为止,我使用chrome tabs API设法获取当前活动网页中所有出站链接的列表。我获取URL,然后使用查询函数和一个使用document.links的小脚本,我已经能够成功地为单个页面执行此操作。
问题: 我需要将其转换为迭代解决方案,并能够扫描当前页面中的所有链接,逐个点击这些链接并重复此过程对于每个链接,最后将新发现的链接添加到现有的列表集中。
我知道这不是一个小问题,基本上需要一些指导我应该使用的方法。 如果不在新标签中打开链接,我无法谨慎地点击链接。我需要一种方法来做到这一点。如果有人可以指导我完成这项工作,那就太棒了。谢谢!
答案 0 :(得分:0)
如果以前完成这件事,我自己也不会费心去做。例如,您可以尝试使用此SO问题中的解决方案来收集所有链接:
答案 1 :(得分:0)
正如评论中所提到的,XHR(XMLHTTPRequest())做到了!这是我现在使用的代码(希望它可以帮助其他有类似问题的人)
var xmlHttp = null;
var allLinks = []; //set of all internal and external links
function httpGet(theUrl)
{
xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, true );
xmlHttp.send( null );
xmlHttp.onreadystatechange = ProcessRequest;
}
function ProcessRequest()
{
if ( xmlHttp.readyState == 4 && xmlHttp.status == 200 )
{
var container = document.createElement("p");
container.innerHTML = xmlHttp.responseText;
var anchors = container.getElementsByTagName("a");
var list = [];
for (var i = 0; i < anchors.length; i++)
{
var href = anchors[i].href;
var exists = 0;
for(var j = 0; j < allLinks.length; j++) // remove duplicates
if(allLinks[j] == href)
exists = 1;
if (exists == 0)
{
allLinks.push(href);
document.getElementById('printLinks').innerHTML += href + "<br />";
}
}
}
}
这可以很好地完成工作,这样我就可以点击并分析列表中的每个URL并继续添加新找到的URL。
礼貌:StackOverflow问题和其他博客:)
答案 2 :(得分:0)
只需对下面提到的脚本应用一些过滤器,您就可以开始了。 以后,我可能会尽快更新此答案。
//未提取入站和出站链接
Links = document.querySelectorAll('a');
for (link in Links)
console.log(Links[link].href);