不能使用,因为APE彗星服务器的AJAX上传(Can not use ajax-upload bec

2019-10-23 01:55发布

描述的第一部分是在不安全的JavaScript尝试访问框架,当尝试上传与阿贾克斯文件问题是,我得到拒绝访问的错误,当尝试使用Ajax的方式上传文件。

长时间的调试后,我发现,一切正常,如果我不加载猿客户端。 APE是彗星服务器http://www.ape-project.org/

猿创建与SRC = “iframe中http://8.ape.readbox.cz:6969/ ?...”。 如果我禁用猿,这IFRAME不产生了以后我没有问题,访问的iframe,为Ajax上传创建的文档。

Togather它们看起来像

<iframe src="http://8.ape.readbox.cz:6969/?..." style="display: none; position: absolute; left: -300px; top: -300px;" id="ape_undefined"></iframe>
<iframe style="display: none;" id="ValumsAjaxUpload0" src="javascript:false;" name="ValumsAjaxUpload0"></iframe>

请任何人可以帮助我吗? 我糊涂了。

Answer 1:

不幸的是,我不能给你一个具体的解决方案。 问题的要点如下:

为了APE进行跨域(实际上,子域)POST调用,猿需要重置document.domain的(一个全球性的,窗口变量),摆脱域前缀的网站(www。,β,等...) 。 虽然0.ape.YOURDOMAIN.com是www.YOURDOMAIN.com限制跨域,它允许从YOURDOMAIN.com同域的权利。 可悲的是,为了让您的上传IFRAME访问父窗口,它需要来自同一个域名为好。 重置document.domain的改变了。

一个解决方案是从“POST”到“GET”更改APE的默认XHR方法。 可以很明显的让外国域的GET请求,但你的数据,你可以发送量是有限的。 此外,你必须注释掉的JavaScript的一个重置document.domain的您的网页就行了。

这不是你可能在寻找伟大的,可靠的解决方案,但我希望它揭示了问题的根源上一盏小灯。



Answer 2:

我使用的jQuery插件格式和APE彗星服务器,并坚持使用iframe中上传文件同样的问题。 这里是我的解决方案(使用静态的iframe,而不是动态的):

添加以下代码到网页中,加载开始APE BEFORE:

<iframe id="file_upload_iframe" name="file_upload_iframe" src="iframe_src.html" style="position: absolute;left: -300px;top:-300px; width:0px;height:0px;"></iframe>

加入该网站的页面iframe_src.html(静态IFRAME的初始源):

<html>
<head>
</head>
<body> 
<script type="text/javascript">
  document.domain = document.domain;  <!-- this is the main line -->
</script>
</body>
</html>

本页面的目的是为了让这个插件进行初始形式提交,避免权限错误。
应用程序应返回下列方式响应:

<html>
<head></head>
<body> 
<script type="text/javascript">document.domain = document.domain;</script>
<textarea>' + YOUR_DATA_TO_RETURN + '</textarea>
</body>
</html>

这是为了避免权限被拒绝错误在第二和进一步的表单提交。

代码在客户端表单提交:

$('#image_add_commit').click(function(){
    $('#file_upload_iframe').unbind();//may be it is unnecessary
    $('#image_add_form').ajaxSubmit( 
        {success: image_add_complete,
        iframe: true,
        iframeTarget: $('#file_upload_iframe').get(0),
        dataType: 'html',
        textarea: true});
}); 

function image_add_complete(data){
   //data variable contains YOUR_DATA_TO_RETURN that was wrapped in HTML code
}

在修改文件jquery.form.js:

查找块

            if (!s.iframeTarget) {
                // add iframe to doc and submit the form
                $io.appendTo('body');

                if (io.attachEvent)
                    io.attachEvent('onload', cb);
                else
                    io.addEventListener('load', cb, false);
            }

并将其更改为

        if (!s.iframeTarget) {
            // add iframe to doc and submit the form
            $io.appendTo('body');
        }
            if (io.attachEvent)
                io.attachEvent('onload', cb);
            else
                io.addEventListener('load', cb, false);

(这只是移动第二大括号向上)



文章来源: Can not use ajax-upload because of ape comet server