【发布时间】:2014-12-16 14:46:15
【问题描述】:
我正在使用 iframe 进行伪 ajax 文件上传。 iframe 与上传 javascript 在同一个视图中:
<iframe id="upload_iframe" name="upload_iframe" style="position: absolute; left: -999em; top: -999em;"></iframe>
他在我的本地机器上运行良好,但是当我部署到 Azure 网站时,我在 Chrome 的调试控制台中收到以下错误:
未捕获的安全错误:无法读取“contentDocument”属性 来自“HTMLIFrameElement”:阻止了具有原点的框架 “https://acme.azurewebsites.net”来自访问具有原点的框架 “空值”。请求访问的帧具有“https”协议, 被访问的帧具有“数据”协议。协议必须匹配。
我理解这个 iframe 是同源的,因为它严格来说是本地的,但是我如何让浏览器相信它是本地的?也就是说,我应该对 iframe 的来源和协议做些什么来避免这个错误吗?
简而言之,这是我的代码:
dataAccess.submitAjaxPostFileRequest = function (completeFunction) {
$("#userProfileForm").get(0).setAttribute("action", $.acme.resource.links.editProfilePictureUrl);
var hasUploaded = false;
function uploadImageComplete() {
if (hasUploaded === true) {
return;
}
var responseObject = JSON.parse($("#upload_iframe").contents().find("pre")[0].innerText);
completeFunction(responseObject);
hasUploaded = true;
}
$("#upload_iframe").load(function() {
uploadImageComplete();
});
$("#userProfileForm")[0].submit();
};
userProfileForm 表单将其target 属性设置为 iframe。这种上传安排似乎适用于大多数请求,我不知道“未捕获的异常”消息是否只是 Chrome 的观察结果,还是潜在的节目停止者。有没有办法我可以“捕获并忽略”这样的异常,如果发生这种情况,只显示一条通用消息?
【问题讨论】:
-
您是否尝试在同一站点上为 IFRAME 的
src属性使用虚拟 URL?示例:<iframe src='blank.html'></iframe>。或者根据需要而不是提前将 IFRAME 注入到文档中?
标签: javascript iframe