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

标签 javascript jquery ajax google-chrome

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

只要我在表单中没有 input[type=file] 就一切正常。

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

Unsafe JavaScript attempt to access frame with URL http://swbdev.net:8888/inc/ajax/edit_page/ from frame with URL http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements. Domains, protocols and ports must match.

它清楚地说明域、协议(protocol)和端口必须匹配。我是否遗漏了什么,在同一个错误中它显示了两个 URL 以及域、协议(protocol)和端口都匹配?

这是调用插件的 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 中的错误:

Permission denied for http://swbdev.net:8888 to get property 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

最佳答案

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

“不安全的 JavaScript 尝试从具有 URL http://swbdev.net:8888/inc/ajax/edit_page/ 的框架访问具有 URL http://swbdev.net:8888/site-pages-edit/19d8bb79c95e164f736f324d1b09a33e/1/#add_elements 的框架。域、协议(protocol)和端口必须匹配。”

在我的例子中,调用页面 url 和文件上传 url 都指向 xxx.mydomain.com,但是当加载调用页面时,一个 javascript 将 document.domain 设置为 mydomain.com 并导致错误。在加载调用页面后检查 document.domain,发现问题并通过删除 javascript 中 xxx.mydomain.com 的 document.domain 行来修复

关于javascript - Chrome jQuery 表单插件跨域安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5642829/

相关文章:

javascript - 内存中 Web Api 返回 {data : Array[0]}

javascript - 实现 jquery UI 自动完成以在您键入 "@"时显示建议

javascript - JS 显示 SWF 的 bytesLoaded

reactjs - 如何在 React 中创建可重用的自定义模态组件?

javascript - document.getElementById 和 Value

javascript - Bootstrap :Fixed nav-static-top on top but scrollable nav-collapse

javascript - 点击按钮移动一个div,javascript

javascript - 自动生成唯一的 DOM id?

jquery - 在 .delay() 中嵌入函数无法正常工作

php - 如何获取动态下拉列表的搜索结果计数?