2012-03-21 38 views
2

嚴格使用Javascript,是否可以調用遠程URL並將其存儲在變量中?要指定,這不會在同一個域中。基本上,我正在試圖找出最佳的解決方案,用於在Chrome擴展中進行數據挖掘/解析。在Javascript變量中存儲外部頁面源代碼?

+0

不,除非你使用'node.js' =) – kirilloid 2012-03-21 19:23:07

+0

當然可以。查看jQuery的[.load()](http://api.jquery.com/load/)函數。 – j08691 2012-03-21 19:25:58

+0

您的在線研究領域在哪裏? – Sparky 2012-03-21 19:37:44

回答

0

如果你被允許使用jQuery你可以有這樣的:

$.ajax({ 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 

另外的$獲得()可以用來實現這個

http://api.jquery.com/jQuery.get/

$.get("test.html", 
    function(data){ 
    // do something with response data 
    }); 
+0

那麼,如果「遠程URL」是「相同的域名」,那麼肯定是的。 – kirilloid 2012-03-21 19:31:05

+0

同意:)但由於他沒有指定任何其他細節,我認爲它是相同的域名 – 2012-03-21 19:32:55

+0

是的,無罪的假設;-) – kirilloid 2012-03-21 19:35:00

3

如果您嘗試從外部域加載頁面,則會遇到same-origin policy。您可以通過在自己的網站上設置簡單代理來解決此限制。這將會是一些服務器端代碼,其功能是代表您向外部頁面發出http請求,檢索響應,然後將該內容返回到發出原始請求的頁面異步JavaScript代碼。

因此,如果您設置代理在/your_internal_proxy.foo,而你使用jQuery,您可以建立一個JS函數是這樣的:

var foreignContent = {}; 
var loadPage = function(pageURL,varName) { 
    $.ajax({ 
    type: 'get', 
    url: '/your_internal_proxy.foo', 
    data: { 
     url_to_get: pageURL 
    }, 
    success: function(result) { 
     foreignContent[varName] = do_something_to(result); 
    } 
    }); 
};​ 

然後,將內容加載到JS變量:

loadPage('http://www.google.com/','goog'); 
loadPage('http://stackoverflow.com','stack'); 
+0

..或使用JSONP,如果遠程URL支持它 – 2012-03-21 19:42:01

1

雖然Ajax可能是一種行之有效的方法,但它取決於您所說的「遠程URL」。由於Javascript跨域限制,Ajax只能用於具有與源自JavaScript的域相同的域的url。有各種各樣的解決方法,但大多數需要遠程域的合作。我曾聽說過使用YQL作爲中介,但從未嘗試過。最簡單的方法是在您自己的服務器上託管代理。