JS打印问题

时间:2019-02-27 13:16:19

标签: javascript

我有一个接受一些参数并将其转发到打印方法的函数。

getPrintAction: function () {
    return new Ext.Action({
        scope   : this,
        handler : function () {
            var printRenderer = new BaseRenderer;
            var data = [...];

            var printData = [...];
            printRenderer.print(printData);
        }
    });
}

虽然这很完美,但是当我添加Ajax请求时,整个过程就坏了。

getPrintAction: function () {
    return new Ext.Action({
        scope   : this,
        handler : function () {
            var printRenderer = new BaseRenderer;
            var data = [...];

            Ext.Ajax.request({
                scope  : this,
                params : {...},
                success: function (result) {
                    var printData = [...];
                    printRenderer.print(printData);
                },
                failure: callback()
            });
        }
    });
}

我试图设置断点,因为我认为新的printData可能会导致错误。但是事实并非如此,printData从回调中解析result,结果很好。我正在获取正确的数组以转发到print()方法。

最终在这里失败:

print: function (component) {

    var win = window.open('','print');

    win.document.write(component); <--- HERE
    win.document.close();
}

如果我要从请求那里将win变量设置为null的位置。

我想这可能是范围问题,但我不知道如何调试...

1 个答案:

答案 0 :(得分:2)

浏览器通常会阻止对window.open的异步调用。您会在网址栏的右侧看到有关此阻止的通知。

enter image description here

这是为了防止垃圾邮件。现在,您讨厌它,但是请相信我,因为这样,您已经避免了很多垃圾邮件,所以不要讨厌它。

在click事件发生的那一刻需要调用此类方法。如果您将来推迟对window.open的呼叫,尽管在单击时就创建了回调,但它将中断。

您可以做的是添加另一个弹出窗口,用户在Ajax请求之后需要单击该弹出窗口。类似于显示“正在加载”弹出窗口,当加载结束时将变为“单击此处打印”。