Jquery SCRIPT70:访问IE中iFrame的权限被拒绝

Jquery SCRIPT70:访问IE中iFrame的权限被拒绝,jquery,internet-explorer,iframe,Jquery,Internet Explorer,Iframe,我在IE中通过隐藏的iFrame上传文件时遇到了一些问题。实际上,文件上传工作正常,但我的jQuery代码显示成功对话框并将链接添加到表中,但没有启动。使用IE开发者工具,我发现了SCRIPT70:Permission denied错误消息。这在Chrome中运行良好,因此我对IE中的问题一无所知。我应该提到我正在使用IE10,所以我认为IE的早期版本中也存在这个问题 本质上,我正在尝试使用一个隐藏的iFrame来模拟类似Ajax的文件上传,因为我们必须支持传统浏览器。当iFrame post成

我在IE中通过隐藏的iFrame上传文件时遇到了一些问题。实际上,文件上传工作正常,但我的jQuery代码显示成功对话框并将链接添加到表中,但没有启动。使用IE开发者工具,我发现了SCRIPT70:Permission denied错误消息。这在Chrome中运行良好,因此我对IE中的问题一无所知。我应该提到我正在使用IE10,所以我认为IE的早期版本中也存在这个问题

本质上,我正在尝试使用一个隐藏的iFrame来模拟类似Ajax的文件上传,因为我们必须支持传统浏览器。当iFrame post成功发布时,它的响应有一个包含JSON的div,我读取该div并进行解析。JSON中的数据用于向用户显示一条消息,指示文件上传的状态,并通过向表中添加一行将链接添加到页面。然而,在IE中,chechUploadResponse功能甚至没有被激活

Javascript:

$(document).ready(function()
{
$('#btnPrint').click(openPrintTimesheetWindow);
$('#date').change(postback);
$('#employee').change(postback);
$('#client').change(postback);
$('#btnUpload').click(uploadFile);
$("#uploadFrame").on("load", function () {
    $('#uploadFrame').contents().find('#userFile').change(uploadFileChanged);
    checkUploadResponse();
    });
});

function postback()
{
$('#timesheetPrintFilter').submit();
}

function uploadFileChanged()
{
$('#ajaxBusy').show();
    $('#uploadFrame').contents().find('#uploadForm').submit();
}

function uploadFile()
{
    var employeeId  = $('#init_employee').val();
    var periodDate  = $('#init_periodEndDate').val();

    $('#uploadFrame').contents().find('#employeeId').val(employeeId);
    $('#uploadFrame').contents().find('#periodEndDate').val(periodDate);
    $('#uploadFrame').contents().find('#userFile').click();
}

function checkUploadResponse()
{
    var response = $('#uploadFrame').contents().find('#uploadResponse').text();

    if (response != null && response != '')
    {
        var response = jQuery.parseJSON(response);

        if (response.status == "ERROR")
        {
            $("#dialog").html(response.message);
            $("#dialog").dialog({ buttons: { "OK": function() { $(this).dialog("close");}}, title: "Error" });
        }
        else
        {
            $("#dialog").html(response.message);
            $("#dialog").dialog({ buttons: { "OK": function() { $(this).dialog("close");}}, title: "Success" });

            var url = response.url;
            var tsaid = response.tsaid;
            var name = response.name;

            var row = '<tr id="tsaid-' + tsaid + '">' +
                    '<td width="80%" valign="top" align="left">' +
                        '<a href="' + url + '">' + name + '</a>' +
                    '</td>' +
                '</tr>';

            $("#tsAttachment").append(row);
        }
    }

    $('#ajaxBusy').hide();
}
$(文档).ready(函数()
{
$('#btnPrint')。单击(openPrintTimesheetWindow);
$('日期')。更改(回发);
$(#employee')。更改(回发);
$(“#客户端”)。更改(回发);
$('btnUpload')。单击(上载文件);
$(“#uploadFrame”)。在(“加载”上,函数(){
$('#uploadFrame').contents().find('#userFile').change(uploadFileChanged);
checkUploadResponse();
});
});
函数postback()
{
$(“#timesheetPrintFilter”).submit();
}
函数uploadFileChanged()
{
$('ajaxBusy').show();
$('#uploadFrame').contents().find('#uploadForm').submit();
}
函数uploadFile()
{
var employeeId=$('#init_employee').val();
var periodDate=$('init#u periodEndDate').val();
$('uploadFrame').contents().find('employeeId').val(employeeId);
$('uploadFrame').contents().find('periodEndDate').val(periodDate);
$('#uploadFrame').contents().find('#userFile')。单击();
}
函数checkUploadResponse()
{
var response=$('#uploadFrame').contents().find('#uploadResponse').text();
if(响应!=null&&response!='')
{
var response=jQuery.parseJSON(response);
如果(response.status==“ERROR”)
{
$(“#dialog”).html(response.message);
$(“#dialog”).dialog({按钮:{“确定”:函数(){$(this).dialog(“close”);}},标题:“Error”});
}
其他的
{
$(“#dialog”).html(response.message);
$(“#dialog”).dialog({按钮:{“确定”:函数(){$(this).dialog(“close”);}},标题:“Success”});
var url=response.url;
var tsaid=response.tsaid;
var name=response.name;
变量行=“”+
'' +
'' +
'' +
'';
$(“#tsAttachment”).append(行);
}
}
$('#ajaxBusy').hide();
}
隐藏iFrame:

<form id="uploadForm" name="uploadForm" action="timesheet-upload.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="3145728" />
    <input type="hidden" name="employeeId" id="employeeId" value="" />
    <input type="hidden" name="periodEndDate" id="periodEndDate" value="" />
    <input type="file" name="userFile" id="userFile" />
</form>

下面是一个在发布后来自隐藏iFrame的响应示例

<div id="uploadResponse">{"status":"SUCCESS","message":"Timesheet successfully uploaded","url":"uploads\/2013\/Aug\/1-49cd1c0217abf676505b349ec88bb5a42b1d5631e41232f08be3b0dced9f65e2.pdf","name":"How To Write A Cover Letter.pdf","tsaid":15}</div>
<form id="uploadForm" name="uploadForm" action="timesheet-upload.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="3145728" />
    <input type="hidden" name="employeeId" id="employeeId" value="" />
    <input type="hidden" name="periodEndDate" id="periodEndDate" value="" />
    <input type="file" name="userFile" id="userFile" />
</form>
{“状态”:“成功”,“消息”:“时间表成功上传”,“url”:“上传\/2013\/Aug\/1-49CD1C0217ABF67650B349EC88BB5A42B1D5631E41232F08BE3B0DCED9F65E2.pdf”,“姓名”:“如何写求职信.pdf”,“tsaid”:15}

我知道这篇文章有点过时,但这可能有助于未来的搜索者了解IE的奥秘

建议的解决方案需要应用于jQuery库。 这里解释了这个问题:

这里给出了解决方案:

另一种解决方案位于jQuery bug报告站点的此标签下: 它由用户muley发布,并且还提供了一个JSFIDLE:

在这种情况下,需要在jQuery库中添加的代码是:

// MY EDIT - this try/catch seems to fix IE 'permission denied' errors as described here:
// http://bugs.jquery.com/ticket/14535
try{
    document === document; //may cause permission denied
}
catch(err){
    document = window.document; //resets document, and no more permission denied errors.
} 
根据:

function Sizzle( selector, context, results, seed )

事实证明,这可能是一个jQuery错误。我从jQuery-1.9.1升级到jQuery-1.10.2,这似乎解决了我的问题。我在jQuery网站上找到了这篇报道,供感兴趣的人参考。希望这能帮助任何有类似问题的人。这解决了我的问题,拯救了我的一天!我的场景是,iframe中的页面在加载内部文档后调用外部文档的基于jquery的函数,然后外部文档的jquery不再工作,只是抛出
访问被拒绝
错误。JS uglify/minify工具将删除
文档===document
行,是否有其他方法触发权限拒绝?谢谢。我正在使用jquery2.2.4;找不到解决方案或找不到此类代码。请提供此版本。