Chrome jQuery表单插件跨域安全漏洞?

时间:2011-04-12 23:34:34

标签: javascript jquery ajax google-chrome

我正在尝试使用jQuery Form Plugi n以ajax形式处理文件上传。

只要我在表单中没有输入[type = file],一切都有效。

当我向表单添加文件输入类型时,它会上传文件并按原样在FireFox中工作,但我在Chrome中收到此错误:

  

不安全的JavaScript尝试访问   带URL的框架   http://swbdev.net:8888/inc/ajax/edit_page/   来自带框架的框架   http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements。   域,协议和端口必须   匹配。

它明确指出域,协议和端口必须匹配。我错过了什么,在同样的错误中,它显示了两个URL,域,协议和端口都匹配?

以下是调用插件的JavaScript:

    <script type="text/javascript">
$(document).ready(function() { 
    var options = { 
        success:    function(data) { 
            alert(data); 
        },
        dataType: 'html',
        url: '/inc/ajax/edit_page/'
    }; 
    $('#add_elements_form').ajaxForm(options); 
 });
</script>

更多信息:

现在它在FireFox中也失败了,不知道为什么它早些起作用,但这是FireFox中的错误:

  

许可被拒绝   获得http://swbdev.net:8888   物业Location.href

它指向插件中的这个代码区域:

            function cb() {
            if (xhr.aborted) {
                return;
            }
            var doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
            if (!doc || doc.location.href == s.iframeSrc) {
                // response not received yet
                if (!timedOut) return;
            }
            io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
            var ok = true;

具体来说,这一行:

 if (!doc || doc.location.href == s.iframeSrc

2 个答案:

答案 0 :(得分:2)

我最近遇到了与jquery文件上传相同的问题。错误与David B相同

“不安全的JavaScript尝试从包含网址http://swbdev.net:8888/inc/ajax/edit_page/的网址访问包含网址http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements的框架。域名,协议和端口必须匹配。”

在我的情况下,调用页面网址和文件上传网址都指向xxx.mydomain.com,但是当加载调用页面时,一个javascript将document.domain设置为mydomain.com并导致错误。在加载调用页面后检查document.domain,显示了该问题并通过删除javascript for xxx.mydomain.com中的document.domain行来修复

答案 1 :(得分:0)

绝对怪异。我会尝试将整个事情设置为“POST”,因为输入[type = file]将需要它。当然它应该工作甚至混合,但尝试一下。

$(document).ready(function() { 
    var options = { 
        success:    function(data) { 
            alert(data); 
        },
        dataType: 'html',
        type: 'POST',   // <-- This was added
        url: '/inc/ajax/edit_page/'
    }; 
    $('#add_elements_form').ajaxForm(options); 
});