2011-10-20 64 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會更快。

相關問題