2010-07-20 72 views
2

是否可以通過jQuery加載方法將我的頁面的外國網站加載到我的頁面的divjQuery加載方法:加載外域?

$('#content').load('http://www.somedomain.com/server/whatever/file.php'); 

這不適合我!

回答

0

您可能可以使用基於PHP的代理腳本解決@Giorgi描述的安全限制。

proxy.php

<?php 
if(isset($_GET['url'])) { 
# Get the Referred URL 
    $raw = file_get_contents($_GET['url']); 
# RegExp to Strip All Script tags and/or links with Javascript in them. 
    $safe = preg_replace('/<script[^>]*>.*<\/script>|[\"\']javascript:.*[\"\']/im' , '' , $raw); 
    echo $safe; 
} else { 
    echo 'No URL Set'; 
} 

然後使用jQuery的負載動作調用等proxy.php網頁?URL = HTTP%3A // www.google.com/

不,preg_replace()行動只是一個粗略的草案 - 你會想做一些重大的測試和調整,以確保你防止人們以這種方式搞亂你的網站。

+0

你的意思是通過搞亂我的網站? – matt 2010-07-21 02:03:08

+0

跨站點腳本 - http://en.wikipedia.org/wiki/Cross-site_scripting。如果在您打電話的第三方頁面中出現JavaScript,可能會觸發它,就像它來自您的網站一樣,這可能會降低安全性。 – 2010-07-21 05:28:58

2

jQuery.load頁:

由於瀏覽器的安全限制,大多數「Ajax」的請求都受到同源策略;該請求無法成功從不同的域,子域或協議中檢索數據。

Same origin policy

1

由於@Giorgi說,跨站呼叫阻塞常由於安全限制。但是,如果遠程站點返回JSONP,呼叫很可能會起作用。

對於其他呼叫,您必須在您自己的網站上的某個頁面上呼叫。而這個頁面可能是一個代理,它取代了後端請求的url。

$('#content').load('/myproxy.handler?url=http://www.somedomain.com/server/whatever/file.php'); 
+0

出於安全原因(例如XSS),我不認爲通用代理是一個好的解決方案。這可能是一個更好的解決方案: /myproxy.handler?action=GetWhateverData然後代理處理程序知道該URL: – 2010-07-20 07:16:31

+0

是否有可能使用jQuery加載與相同的URL的SUBDOMAIN?如果負載在http://www.mydomain.com上觸發,我可以加載http://hello.mydomain.com/hello.php? – matt 2010-07-21 02:20:21

+0

這是可能的,它涉及到設置document.domain =「yourdomain.com」。有關更多信息和示例,請參閱http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/。 – 2010-07-21 06:32:40