我如何使用JavaScript从其他网站检索文本?

时间:2011-10-20 05:09:32

标签: javascript

免责声明:请原谅此帖的宗教方面。

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

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

我想要做的就是从页面中删除一节经文。我认为这个网站会很方便,因为它会用正确的网址标记单个经文:http://www.drbo.org/x/d?b=drb&bk=47&ch=16&l=18。我已经尝试在iframe中加载它了但是我不能在我的生活中抓住<span>元素和class='highlight',这是偶然的页面上唯一的跨度。

我今天所做的尝试是以下列形式使用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 个答案:

答案 0 :(得分:3)

这正是同源策略试图阻止的内容。它不会让你这么做,纯粹而简单。想象一下,如果你能从网上银行网站“只检索文本”......那就不顺利了。

JSONP仅在其他网站允许时才有效。即便如此,您仍然容易受到许多漏洞的影响。对于初学者,这允许目标站点将任意代码注入您的网站。如果绝对信任其他网站,则应该只使用此功能。

更好的解决方案是使用常规AJAX并让您的服务器从远程网站获取内容(例如:使用cURL)并将其转发回客户端。

答案 1 :(得分: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这样的服务器端语言来执行卷曲请求并获取信息。 PHP会更快。