【问题标题】:Uncaught TypeError: Cannot read property 'document' of undefined未捕获的类型错误:无法读取未定义的属性“文档”
【发布时间】:2014-01-14 21:10:51
【问题描述】:

我有以下功能,在我测试过的几台电脑上运行良好。我已经在 Chrome、IE 和 Firefox 上对此进行了测试,没有任何问题。但是,有 1 台特定的 PC(运行 Chrome)会在该行抛出此错误“Uncaught TypeError: Cannot read property 'document' of undefined”:

                win.document.write(data);

会不会是因为win为空?

如果是这样,为什么在这台特定的 PC 上会出现这种情况?

是否有一些 Chrome 设置需要设置?

方法:

    function viewReport() {
        console.info('generating event report');
        var frmData = $('#frmEventReport').serializeArray();
        var rptName = 'EventReport' + Math.floor((Math.random() * 100) + 1);
        console.info('generated random report name ' + rptName);
        $.ajax({
            //type: "GET",
            timeout: 120000,
            url: '@Url.Action("EventReport", "Reports")',
            data: frmData,
            success: function (data) {
                console.info('succesfully called back');
                var win = window.open('', rptName, '_blank');
                console.info('opening window');
                win.document.write(data);

            },
            error: function (x, y, z) {
                console.info(x + ' ' + y + ' ' + z);
            }
        });
    }

【问题讨论】:

  • 这里的win 是对新创建的窗口的引用。如果调用失败,它将为空。因此你得到错误

标签: javascript .net asp.net-mvc dom browser


【解决方案1】:

是否在该 PC 的 Chrome 上启用了弹出窗口?如果不是,则无法创建新窗口,因此 winundefined

【讨论】:

  • 啊,是的,这就是原因!
【解决方案2】:

这是因为当你尝试创建异步ajax请求成功后弹出win得到undefined。所以你可以添加 async:false 如下这对我有用:

function viewReport() {
    console.info('generating event report');
    var frmData = $('#frmEventReport').serializeArray();
    var rptName = 'EventReport' + Math.floor((Math.random() * 100) + 1);
    console.info('generated random report name ' + rptName);
    $.ajax({
        //type: "GET",
        timeout: 120000,
        url: '@Url.Action("EventReport", "Reports")',
        data: frmData,
        async:false,
        success: function (data) {
            console.info('succesfully called back');
            var win = window.open('', rptName, '_blank');
            console.info('opening window');
            win.document.write(data);

        },
        error: function (x, y, z) {
            console.info(x + ' ' + y + ' ' + z);
        }
    });
}

【讨论】:

    【解决方案3】:

    出现此错误是因为系统中禁用了弹出窗口。因此请通过系统设置选项启用弹出窗口。

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2021-12-22
      • 2015-01-06
      • 2017-07-26
      • 2019-02-26
      • 2021-12-25
      • 2020-06-16
      相关资源
      最近更新 更多