我正在尝试使用 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/