2012-04-17 70 views
1

我不知道是否有可能,但我想要的是創建一些腳本掃描到不在我的服務器上的網頁,並抓住它的源代碼,所以我可以使用一些數據,像PERL或Rails腳本,但使用JQuery/Javascript使用jquery(而不是AJAX)跨域請求

這可能嗎?

+1

當你說源代碼時,你的意思是HTML響應還是實際的服務器端代碼?後者是不可能的(除非Web服務器設置爲允許它,這將是非常,非常非常罕見的)。 – 2012-04-17 16:32:25

+0

我只需要HTML響應! – steps 2012-04-17 16:33:05

+0

只能在javascript中執行跨站點數據的方式是JSONP,因此除非主機支持它,否則您運氣不佳 – scibuff 2012-04-17 16:33:14

回答

3

在一般情況下,不,這是不可能的,因爲Same Origin Policy的客戶端,它可以防止您的裝載和觀察不同來源加載的內容的HTML和腳本源。 (你可以,當然,使用JavaScript 服務器上做這個   —的NodeJS,犀牛,以及類似的。)

但是,如果其他域支持Cross-Origin Resource Sharing,而您使用also supports it瀏覽器,可以讓另一端(另一個網站)允許來源(或所有來源)的代碼訪問它。不過,另一端必須允許。

在這種情況下,您也會聽到有關JSON-P的消息,但只允許您從另一端獲取數據(而非HTML源等),並要求另一端明確支持它。

所以你可能必須有一個服務器參與。但並不一定表示您的服務器必須是服務器:您可以將YQL用作cross-domain proxy用於某些目的。

+2

YQL解決了我的問題!謝謝! – steps 2012-04-17 16:53:43

+0

@JoãoPauloApolinárioPassos:很划算!很高興這有幫助。 – 2012-04-17 17:41:40

0

同源策略

的同源策略是什麼網頁內容的JavaScript代碼可以交互清掃安全限制。它通常在網頁包含元素或打開其他瀏覽器窗口時發揮作用。在這種情況下,同源政策管理一個窗口或框架中的JavaScript代碼與其他窗口和框架的內容的交互。特別是,腳本只能讀取與包含腳本的文檔具有相同來源的窗口和文檔的屬性。

文檔的來源被定義爲從中加載文檔的URL的協議,主機和端口。從不同Web服務器加載的文檔具有不同的來源。通過同一主機的不同端口加載的文檔具有不同的來源。加載了http:協議的文檔與加載了https:協議的文檔不同,即使它們來自同一個Web服務器。

重要的是要明白腳本本身的起源與同源策略無關:重要的是嵌入腳本的文檔的來源。例如,假設在主機B提供的網頁中包含由主機A託管的腳本(使用元素的src屬性)。該腳本的來源是主機B,腳本可以完全訪問包含它的文檔。如果該腳本打開一個新窗口並從主機B加載第二個文檔,該腳本還可以完全訪問該第二個文檔的內容。但是,如果腳本打開第三個窗口並從主機C(甚至主機A的一個主機)加載文檔,則同源策略生效並阻止腳本訪問此文檔。

作者:David Flangan:Javascript; The Definite Guide

0

從你的問題的最純粹意義上來說,這是可能的,但我感覺你誤解了這些技術的工作原理。即使x域請求是可能的,但實際上沒有辦法讓javascript從外部源收集數據,除非在瀏覽器中使用AJAX。我之所以說答案是肯定的,是因爲這些限制只適用於JavaScript在瀏覽器內執行的情況。例如,如果將javascript與node.js結合使用,則規則完全不同,因爲javascript可以創建套接字,並且x域限制不再適用。

也許你應該澄清你的問題,這樣可以提供更合適的答案。

+0

謝謝,我從中學到了很多! :) – steps 2012-04-17 16:51:34