Javascript 阻止访问带有原点的Iframe';空';

Javascript 阻止访问带有原点的Iframe';空';,javascript,iframe,Javascript,Iframe,我使用iframe进行伪ajax文件上传。iframe与上载javascript位于同一视图中: <iframe id="upload_iframe" name="upload_iframe" style="position: absolute; left: -999em; top: -999em;"></iframe> 表单userProfileForm将其target属性设置为iframe。这种上传安排似乎适用于大多数请求,我不知道“未捕获的异常”消息是对Chrom

我使用iframe进行伪ajax文件上传。iframe与上载javascript位于同一视图中:

<iframe id="upload_iframe" name="upload_iframe" style="position: absolute; left: -999em; top: -999em;"></iframe>

表单
userProfileForm
将其
target
属性设置为iframe。这种上传安排似乎适用于大多数请求,我不知道“未捕获的异常”消息是对Chrome的一种观察,还是一种潜在的节目阻碍。是否有一种方法可以“捕获并忽略”这样的异常,并在发生这种情况时显示一条通用消息?

这可能取决于您的浏览器,但
数据协议通常不支持
IFRAME
元素,请参阅维基百科条目:

它可能在localhost上工作,因为localhost可以使用不同的身份验证和授权方法(例如,在Windows上,它可以作为受信任的站点运行,并且可以自动将Windows用户凭据传递给服务器,等等)。我认为相同的来源意味着协议、主机和端口必须全部匹配。由于
数据
协议不同于
https
协议,这不是相同的来源,因此存在安全错误

通常,数据协议仅由以下元素支持:

  • 对象(仅图像)(即:非activeX控件)
  • img
  • 输入类型=图像
  • 链接
  • 接受URL的CSS声明

你能发布更多的代码和问题陈述吗?有多种其他方法可以完成文件上载。例如,传统的POST方法(单文件)、HTML5方法(多文件),甚至使用javascript向web服务发送字节流(我曾经在ActiveX控件中这样做,该控件使用TWAIN扫描用户计算机上的文档,然后将扫描的图像上载到网站)。

添加了我的代码。iframe在这里看起来很薄,因此我想知道,例如,是什么使它采用
数据
协议,或者如何使它采用
https
协议。这是我在IE9中上传“ajaxy”文件的唯一方法。如果我想尝试使用ActiveX来流式处理文件,我甚至不想开始猜测会出现什么复杂情况。希望你现在已经解决了这个问题-不知何故,我错过了更新通知。对于IE7/8/9,我使用jQuery UI对话框包装Iframe以进行文件上载,但Iframe指向具有
(psuedocode/details省略)的网页。同时,我也感谢你仍然支持IE9;这里的大多数人对此不屑一顾,并建议使用更新的浏览器,但出于某种原因,许多web开发人员没有意识到企业/行业采用的速度很慢,并且经常使用几个旧版本的浏览器。我不再参与该项目,但不知何故,我成功了。我想是当我返回一个正确的HTML文档来包装JSON时,而不仅仅是JSON。具有讽刺意味的是,客户端是Microsoft SA,它坚持将兼容性追溯到IE9。您是否尝试过在同一站点上为IFRAME的
src
属性使用虚拟URL?示例:
。或者根据需要而不是提前将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();
};