我想要得到h = Af ???????????来自社交网站的报告链接的价值。我测试了这个:http://jsfiddle.net/rtnNd/6/来检索值,它在我测试时起作用。
但我不希望用户与之互动。脚本必须自动检索页面并获取它的值。 (我使用谷歌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);
}
}
我去了这个错误,“错误:未捕获TypeError:无法调用方法'替换'未定义”,即使我添加了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);
}
当我运行它时,我得到了一个名为“object has no method'find'”的错误。
为什么在调用xmlhttp.onreadystatechange语句后getElementsByClassName,getParameterByName,Jquery,getAttribute不能正常工作?请你指点我。有没有办法找到如何获得价值?感谢您阅读我的问题并回答!
更新: (如果我在个人资料页面上访问,在谷歌浏览器的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);
答案 0 :(得分:2)
你的“with jQuery”示例在不使用jQuery的情况下做了很多事情 - jQuery做得很好。您可能想要了解如何将jQuery与AJAX事件一起使用。 Look at these examples and try them
一开始,jQuery可能令人生畏。但请继续关注the jQuery website上的示例并尝试一下。查看我的一些旧帖子以获取更多示例。和你一样,过去几个月我不得不用火来学习它。
不要忘记尝试jQueryUI示例 - 当你尝试对话框,标签,手风琴等时,你会跳得很开心。
您也可能想要分解一些复杂的jQuery语句,例如:
var href = $($('.hidden_elem').d.replace('<!--', '').replace('-->', '')).find('.itemAnchor[href*="h="]').attr('href');
在这样的链中添加jQuery方法:$('#myElement').dothis(chain1).dothat(chain2).doanother();
可以快速输入和读取,但很难排除故障。
答案 1 :(得分:0)
如果您在Facebook外使用此脚本,您肯定会获得SOP,由于安全原因这是有限的,请参阅:Access Control Allow Origin not allowed by
所以,我们假设你得到了响应字符串 xmlhttp.responseText
,所以你不能使用一些只能用于DOM对象的JQuery或JavaScript函数,但它只是普通的字符串。例如,您使用了find()
,attr()
,这些方法不适用于字符串。你可以把它作为一个字符串来玩,仅此而已。