2011-10-20 54 views
1

免责声明:请原谅这篇文章的宗教方面。我将如何使用JavaScript从其他网站检索文本?

无论如何,标题说明了我正在寻找的东西。我正在编写一个程序,在页面上查找圣经参考,然后在参考文献的鼠标悬停时,在工具提示中显示实际的经文。

我希望最终能够从这个网站获得许可。现在,我做了研究,并了解了“同源政策”;但据我所知,这并不适用,因为我没有试图从该网站上的JavaScript调用函数/方法。

我想要做的就是从页面中取出一节经文。我认为这个网站会很方便,因为它会使用正确的网址标记各个经文,例如:http://www.drbo.org/x/d?b=drb&bk=47&ch=16&l=18。我试过把它加载到iframe中,但我不能在我的生活中用class='highlight'获得<span>元素,这是偶然的,是页面上唯一的跨度。

我今天所做的尝试是在形式使用JSONP:

function crossedFingers(variable) { 
    alert(variable); 
} 

var scr = document.createElement('script'); 
scr.setAttribute('type', 'text/javascript'); 
scr.setAttribute('charset', 'utf-8'); 
scr.setAttribute('src', 'http://www.drbo.org/x/d?b=drb&bk=47&ch=16&l=18&callback=crossedFingers'); 

document.getElementsByTagName('head').item(0).appendChild(scr); 

我也有一个版本,我不得不

function crossedFingers() { 
    alert('hi'); 
} 

只是为了看看函数实际上得到所谓的并没有。我正在使用WAMP,并且在www目录中有这些文件,但我不确定这应该起作用。任何帮助将不胜感激,对不起,如果这在一个不适当的问题!

我刚刚感到沮丧。 @ _ @

回答

2

这正是同源策略试图防止的原因。它不会让你这么做,纯粹而简单。试想一下,如果你能从网上银行网站“检索文本”,那就不太好。

JSONP只适用于其他网站允许的情况。即便如此,你仍然面临许多漏洞。对于初学者来说,这允许目标网站向您的网站注入任意代码到。你只能使用这个,如果你绝对信任其他网站。

更好的解决方案是使用普通的AJAX,让你的服务器从远程网站获取内容(例如:使用cURL)并将它们中继给客户端。

+0

谢谢你,你的例子让我更加清楚!所以我的目标是让别人在他们的网页上抛出诸如''这样的东西来让它工作。如果假设我可以让该网站的所有者将文件托管在他们的服务器上,那么我能够访问文本没有问题吗? – dunnza

1

Javascript是一种客户端语言,通常不能进行跨域查询。使用AJAX可以用下面的代码来完成。

<iframe id="holder" style="display: none"> 

<script type="text/javascript"> 
$("#holder").load("http://www.drbo.org/x/d?b=drb&bk=47&ch=16&l=18",function() { 
$link = $("#holder").contents().find("span.highlight"); 
}); 
</script> 

然后使用javascript来检查元素。但是随着最近的跨域政策,这变得越来越困难。您可能需要更改并使用像php这样的服务器端语言来执行curl请求并获取信息。 PHP会更快。

相关问题