我需要一点帮助。。
我一直在开发一个 Jqery 插件来获取使用 XHR 的网站上 url 的页面排名,
问题是当从谷歌服务器请求排名时,页面没有返回任何内容,但是如果我使用检查器并获取请求的 url 并通过我的浏览器访问它,则会显示 pageranks。所以它一定是带有标题的东西,但这让我感到困惑。
这是一些源代码,但我删除了几个不需要审查的方面。
pagerank.plugin.js
(
$.fn.PageRank = function(callback)
{
var _library = new Object();
//Creat the system library
_library.parseUrl = function(a)
{
var b = {};
var a = a || '';
/*
* parse the url to extract its parts
*/
if (a = a.match(/((s?ftp|https?):\/\/){1}([^\/:]+)?(:([0-9]+))?([^\?#]+)?(\?([^#]+))?(#(.+))?/)) {
b.scheme = a[2] ? a[2] : "http";
b.host = a[3] ? a[3] : null;
b.port = a[5] ? a[5] : null;
b.path = a[6] ? a[6] : null;
b.args = a[8] ? a[8] : null;
b.anchor = a[10] ? a[10] : null
}
return b
}
_library.ValidUrl = function(url)
{
var b = true;
return b = url.host === undefined ? false : url.scheme != "http" && url.scheme != "https" ? false : url.host == "localhost" ? false : true
}
_library.toHex = function(a){
return (a < 16 ? "0" : "") + a.toString(16)
}
_library.hexEncodeU32 = function(a) {
}
_library.generateHash = function(a)
{
for (var b = 16909125, c = 0; c < a.length; c++)
{
}
return _library.hexEncodeU32(b)
}
var CheckPageRank = function(domain,_call)
{
var hash = _library.generateHash(domain);
$.ajax(
{
url: 'http://www.google.com/search?client=navclient-auto&ch=8'+hash+'&features=Rank&q=info:' + escape(domain),
async: true,
dataType: 'html',
ifModified:true,
contentType:'',
type:'GET',
beforeSend:function(xhr)
{
xhr.setRequestHeader('Referer','http://google.com/'); //Set Referer
},
success: function(content,textS,xhr){
var d = xhr.responseText.substr(9, 2).replace(/\s$/, "");
if (d == "" || isNaN(d * 1)) d = "0";
_call(d);
}
});
}
//Return the callback
$(this).each(function(){
urlsegments = _library.parseUrl($(this).attr('href'))
if(_library.ValidUrl(urlsegments))
{
CheckPageRank(urlsegments.host,function(rank){
alert(rank)
callback(rank);
});
}
});
return this; //Dont break any chain.
}
)(jQuery);
Index.html(示例)
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script type="text/javascript" src="pagerank.plugin.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('a').PageRank(function(pr){
alert(pr);
})
});
</script>
</head>
<body>
<a href="http://facebook.com">a</a>
<a href="http://twitter.com">a</a>
<div></div>
</body>
</html>
我只是无法理解它为什么这样做。
--
笔记:
在 jquery 之外使用和 XHR 工作得很好!
function getPageRank(a, b) {
a = "http://www.google.com/search?client=navclient-auto&ch=8" + awesomeHash(a) + "&features=Rank&q=info:" + a;
var c = new XMLHttpRequest;
c.open("GET", a, true);
c.onreadystatechange = function () {
if (c.readyState == 4) {
console.log("reponse text is " + c.responseText);
var d = c.responseText.substr(9, 2).replace(/\s$/, "");
if (d == "" || isNaN(d * 1)) d = "0";
b(d)
}
};
c.send()
}