使用GM_xmlhttpRequest获取多个外部URL,将页面<H1>添加到链接吗?

如何解决使用GM_xmlhttpRequest获取多个外部URL,将页面<H1>添加到链接吗?

| 已解决,感谢Hellion的帮助! 这是代码
// ==UserScript==
// @name          Facebook Comment Moderation Links
// @description   Appends story titles to Facebook Comment Moderation \"Visit Website\" links
// @include       httP*://developers.facebook.com/tools/*
// ==/UserScript==

var allLinks,thisLink,expr,pageTitle,myURL,myPage,pageContent,title;

// grabbing URLs
function fetchPage(myPage,targetLink) {
        GM_xmlhttpRequest({
            method: \'GET\',url: myPage,onload: function(response){

                // get the HTML content of the page
                pageContent = response.responseText;

                // use regex to extract its h1 tag
                pageTitle = pageContent.match(/<h1.*?>(.*?)<\\/h1>/g)[0];

                // strip html tags from the result
                pageTitle = pageTitle.replace(/<.*?>/g,\'\');

                // append headline to Visit Website link
                title = document.createElement(\'div\');
                title.style.backgroundColor = \"yellow\";
                title.style.color = \"#000\";
                title.appendChild(document.createTextNode(pageTitle));
                targetLink.parentNode.insertBefore(title,targetLink.nextSibling);  

            }
        }); 
}


function processLinks() {

    // define which links to look for
    expr = \"//a[contains (string(),\'Visit Website\')]\";
    allLinks = document.evaluate(
        expr,document,null,XPathResult.UnorDERED_NODE_SNAPSHOT_TYPE,null);

    // loop through the links
    for (var i = 0; i < allLinks.snapshotLength; i++) {
        thisLink = allLinks.snapshotItem(i);    
        myURL = thisLink.getAttribute(\'href\');

        // follow Visit Website link and attach corresponding headline
        fetchPage(myURL,thisLink);
    }
}

// get the ball rolling
processLinks();
---更早的东西--- 我正在尝试制作一个Greasemonkey脚本,该脚本从一组链接的每一个获取URL,并将页面的h1标签内容附加到链接的末尾。 到目前为止,我可以获取它来显示URL本身,它不需要页面请求,但是不需要页面的h1标签内容。 我从该站点上的其他问题中了解到GM_xmlhttpRequest是异步的,并且我很确定这至少是原因的一部分。但是,我找不到针对此特定问题的解决方案。 下面是我到目前为止的代码。它用于Facebook的网站评论审核工具-在“主持人视图”中,每个评论都有一个链接“访问网站”,可将您带到评论所在的文章。 就像现在写的那样,它将在每个“访问网站”链接的后面附加HTTP状态代码,而不是页面标题,然后附加URL。状态代码部分只是一个占位符。我计划添加HTML解析等,以便稍后获取h1标签。 现在,我只是想让GM_xmlhttpRequest和内容插入匹配。 任何帮助解决此问题将不胜感激。谢谢!
var allLinks,title;

// define which links to process
    expr = \"//a[contains (string(),null);

// cycle through links
for (var i = 0; i < allLinks.snapshotLength; i++) {

    thisLink = allLinks.snapshotItem(i);    
    myURL = thisLink.getAttribute(\'href\');

    GM_xmlhttpRequest({
        method: \'GET\',url: myURL,onload: function(responseDetails){

            pageTitle = responseDetails.status;

        }
    });

    // append info to end of each link 
    title = document.createElement(\'div\');
    title.style.backgroundColor = \"yellow\";
    title.style.color = \"#000\";
    title.appendChild(document.createTextNode(
        \' [\' + pageTitle + \' - \' + thisLink.getAttribute(\'href\') + \']\'));
    thisLink.parentNode.insertBefore(title,thisLink.nextSibling);  

}
    

解决方法

        正如它所写的,是的,您遭受
GM_xmlhttpRequest()
调用的异步特性的困扰。循环将触发并开始获取所有pageTitle值,但将立即继续运行,而不等待请求完成,因此pageTitle(顺便说一下,您没有在任何地方声明)为null用于textNode。 要纠正这种情况,需要采取的第一步是将currently2ѭ调用之后当前的所有内容移至
onload: function()
定义的内部。然后,只有在检索到每个页面之后,您才能继续修改链接。 (我不确定也可能需要传递或重新获取
thislink
值的其他问题。)     ,        您可以将以下3行更改为仅1行:
            // get the HTML content of the page
            pageContent = response.responseText;

            // use regex to extract its h1 tag
            pageTitle = pageContent.match(/<h1.*?>(.*?)<\\/h1>/g)[0];

            // strip html tags from the result
            pageTitle = pageTitle.replace(/<.*?>/g,\'\');
             pageTitle = $(\'h1\',response.response).text();
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?