-4

我想得到 h=Af?????????? 来自社交网站上的报告链接的价值。我用这个测试:http: //jsfiddle.net/rtnNd/6/来检索值,它在我测试时有效。

但我不希望用户与之交互。脚本必须自动检索页面并获取它的值。(我使用 Google Chrome Javascript 控制台进行测试)当我尝试使用以下编码时,它会拼写页面并分配给值 d 并找到 h 的值,但搜索/替换根本不起作用。为什么 getElementsByClassName 不起作用?

使用 JQuery:

function getParameterByName(name, path) {
        var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

var URL = 'http://www.facebook.com/zuck';
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", URL, true);
xmlhttp.setRequestHeader("Content-type", "application/xhtml+xml");
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
       if (xmlhttp.status == 404) {
               result = error404;
       }
       if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
              var d = xmlhttp.responseText;
               var jayQuery = document.createElement('script');
               jayQuery.src = "//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js";
               document.getElementsByTagName("head")[0].appendChild(jayQuery);
               var href = $($('.hidden_elem').d.replace('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href');
               var fbhvalue = getParameterByName('h', href);
               alert(fbhvalue);
       }
}

我出现这个错误,“错误:未捕获的类型错误:无法调用未定义的方法'替换'”,即使我添加了 jquery。

没有 JQuery:

      function getParameterByName(name, path) {
        var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
        return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
var URL = 'http://www.facebook.com/zuck';
xmlhttp = new XMLHttpRequest();

xmlhttp.open("GET", URL, true);
xmlhttp.setRequestHeader("Content-type", "application/xhtml+xml");
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
        if (xmlhttp.status == 404) {
                // result = error404;
        }
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                d = xmlhttp.responseText;
                checker(d);
        }
}

function checker(i) {
        i.value = i;

        var hiddenElHtml = i.replace('<!--', '').replace('-->', '').find('.itemAnchor[href*="h="]').attr('href');

        var divObj = document.createElement('div');
        divObj.innerHTML = hiddenElHtml;

        var itemAnchor = divObj.getElementsByClassName('itemAnchor')[0];
        var href = itemAnchor.getAttribute('href');
        var fbId = getParameterByName('h', href);
        alert(fbId);

}

当我运行它时,我得到一个名为“对象没有方法'find'”的错误。

为什么在调用 xmlhttp.onreadystatechange 语句后 getElementsByClassName、getParameterByName、Jquery、getAttribute 不起作用?请你指出我。有没有办法找出如何获得价值?感谢您阅读我的问题并回答!

更新:(如果我在个人资料页面上访问,在 Google Chrome 的 javascript 控制台中运行以下脚本,它会获得 h 值 - 但我真的不希望那样......我想指定用户个人资料名称,它必须自动检索并获取它的 h 值。)

    var jayQuery = document.createElement('script');
    jayQuery.src = "//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js";
    document.getElementsByTagName("head")[0].appendChild(jayQuery);

    function getParameterByName(name, path) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(path);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
    }


    var href = $($('.hidden_elem')[1].innerHTML.replace('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href');
    alert(href);
    var fbId = getParameterByName('h', href);
    alert(fbId);
4

2 回答 2

2

您的“使用 jQuery”示例在不使用 jQuery 的情况下做了很多事情——这些事情 jQuery 做得很好。您可能想了解如何将 jQuery 与 AJAX 事件一起使用。查看这些示例并尝试它们

一开始,jQuery 可能令人生畏。但是请继续查看jQuery 网站上的示例并尝试一下。查看我的一些旧帖子以获取更多示例。像你一样,在过去的几个月里,我不得不通过火来学习它。

并且不要忘记尝试 jQueryUI 示例——当您尝试对话框、选项卡、手风琴等时,您会高兴得手舞足蹈。

您可能还想分解一些复杂的 jQuery 语句,例如:

var href = $($('.hidden_elem').d.replace('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href');

像这样在链中添加 jQuery 方法:$('#myElement').dothis(chain1).dothat(chain2).doanother();输入和阅读速度很快,但很难排除故障。

祝你好运!

于 2012-11-22T23:27:46.460 回答
0

如果您在 facebook 之外使用此脚本,您肯定会得到SOP,由于安全原因,请参阅:Access Control Allow Origin not allowed by

所以,假设你得到了响应字符串 xmlhttp.responseText,所以你不能使用一些只适用于 DOM 对象的 JQuery 或 JavaScript 函数,但它只是纯字符串。例如,您使用find(), attr(), 方法不适用于字符串。你可以把它当作一个字符串来玩,仅此而已。

于 2012-11-24T19:15:05.677 回答