2010-07-20 48 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