-1

在大家发现之前,之前或多或少地有人问过这个问题:Load remote URL with Greasemonkey and jQuery

然而,那是3年前的事了。我尝试了答案中提出的各种方法,但都没有奏效。

基本上,我的问题是这样的:我正在编写一个greasemonkey脚本,目前应该是A)获取页面上的链接,B)请求链接链接到的页面(它在同一主机上), C) 在该页面上找到某个值。我正在使用 jQuery 1.7.2 和最新版本的 Greasemonkey 来尝试完成此操作。

问题是,虽然我可以成功请求页面,但我无法对响应做任何事情。我尝试将响应分配给回调之外的变量,但它最终为空。我已经尝试将响应 html 附加到我在页面上插入的 div 中,但是在 div 上使用 console.log 显示它是空的(即使 firebug 实际上显示了 html)。就像回调一结束,检索到的 html 不仅不存在,而且根本不存在。

所以基本上,我想问如何检索html,以便在请求完成后我可以实际使用它。这是我现在得到的(我已经删除了上述尝试将响应附加到页面上的 div):

function getLink(url){
    var resp;
    GM_xmlhttpRequest({
        method: 'GET',
        url: url,
        onload: function(response){
            resp = response.responseText;
        }
    });
    console.log(resp) //nothing here...

    //failed code :(
    /*$.ajax(url, {success: function(data){resp = data})
    console.log(data)*/
}

我需要编写什么魔术代码才能使上述内容按预期工作?

4

1 回答 1

0

GM_xmlhttpRequest()默认情况下异步操作。这意味着onload火灾在console.log(resp) //nothing here...线路之后很长时间。

虽然GM_xmlhttpRequest()now 需要一个synchronous: true参数,但它非常有问题,我暂时不建议尝试使用它。

做事的正确方法(以及更好的编程和 UI 实践)是将所有内容放在onload处理程序中:

function getLink (url) {
    GM_xmlhttpRequest ( {
        method: 'GET',
        url: url,
        onload: function (response) {
            var resp = response.responseText;
            console.log (resp);

            // DO EVERYTHING THAT REQUIRES resp HERE.
        }
    } );
}

这可能需要改变您对某些操作的看法,但这是非常值得的。

于 2012-06-25T03:02:28.017 回答