我有一个基于jquery iframe的上传脚本,允许我的客户在他们的网站上更改图像。 工作很好,但我希望有一个跨域解决方案,所以当我更新我的代码时,我的所有客户也会得到更新。
文件是实际上传的,但我无法读取iframe的内容,即使他在那里,我也可以看到它,但无法读取它。
我知道这是一个安全问题,但它是我的服务器,我只是允许上传.jpg文件。
如何解决这个问题,我的所有域都在同一个ip中,托管在vps服务器中。
一些代码
div_browser = '<iframe id="iframe_uploads" name="iframe_uploads" frameborder="0" align="center"';
div_browser += '"></iframe>';
modal_uploads(div_browser);
function modal_uploads(data) {
var modal = '<div id="modal">';
modal += data;
modal += '</div>';
$("#gestor").append(modal);
//
var id = "#modal";
var winH = $("#gestor").height();
var winW = $("#gestor").width();
$(id).css('top', winH/2-$(id).height()/2);
$(id).css('left', winW/2-$(id).width()/2);
$(id).fadeIn(2000);
}
$("#iframe_uploads").load(function() {
var resposta = document.getElementById('iframe_uploads').contentWindow.document.body.innerHTML;
var erro = resposta.split('|');
var medidas = erro[1];
if(erro[0] == "ok") {
nome.val('pics/'+$('#ficheiro').val());
var wh = medidas.split('=');
$("#"+nome[0].id+"_width").val(wh[0]);
$("#"+nome[0].id+"_height").val(wh[1]);
$('#modal').animate({opacity: 1.0},1000).fadeOut('fast');
$('#modal').remove();
} else {
$('#modal').html = resposta;
}
});
这样做,我有一个iframe等待上传过程的结果。 我可以看到上传已经成功,因为iframe内容就在那里,比如“ok | 44 = 55”,但是我无法操纵那些数据......
谢谢,希望你能帮助我
答案 0 :(得分:0)
问题是,即使您的服务器具有相同的IP,它也是客户端的跨域问题(因为它们具有不同的域)。
但是,由于您拥有服务器,因此您可以执行一些解决方法:
1)只使用一个域名(最明显的,但最不可能的是你不能)
2)在您的服务器中使用代理代码(将一个域与另一个域通信,因此客户端只能看到1个域)
为了更好地帮助您,我想知道:1)您在服务器中使用了哪种技术? (php,java,asp.net等)2)你可以发布你的表单代码(主要是action / urls)
希望这有帮助
答案 1 :(得分:0)
我想如果没有完整的服务器控制,这是不可能的。
我设法使用php ftp上传功能。
答案 2 :(得分:0)
实际上,您可以使用以下技巧来完成这项工作:
假设您在site.com上有一个表单,并在uploads.com上载处理程序,那么您可以按照自己的意愿执行操作,但在执行其工作后上传处理程序,而不是将响应重定向发送到例如:
http://site.com/redirect/?status=OK&width=44&height=55
或
http://site.com/redirect/?status=Some+error+message
和http://site.com/redirect/
只会向您发送一个空页。
然后在您的加载处理程序中解析iframe document.location.href
并获得您的回复。在某些浏览器load
事件将被触发两次(重定向响应+最终空响应),您应该忽略权限被拒绝的错误。