检测选项卡/下载是否已完成加载JavaScript

时间:2015-08-11 09:27:20

标签: javascript pdf grails

我使用以下模式在Grails上生成pdf:

  

可选步骤   用户将选择要下载* .pdf或在另一个选项卡上打开它,默认是将其打开到另一个选项卡。

主要步骤:

  1. 点击生成报告按钮。
  2. 该按钮会将其文本更改为生成报告 等待...
  3. 它会运行一个像这样的JavaScript块:

    var generate = "<sample url>"
    
    // some amazing processing goes here that appends data to the
    // query string.
    
    window.open(generate,'_blank');
    
  4. 然后它将打开一个新标签(或根据他选择的选项开始下载)。

      

    注意:打开的标签不是普通的html标记,而是在浏览器标签上呈现的*.pdf

  5. 标签(或下载)将加载至少五秒钟至1分钟左右。
  6. 该选项卡上的pdf将完成加载,用户现在可以浏览pdf(向下滚动,保存,打印等);或者如果是下载,他现在可以打开该文件。
  7. 调用选项卡上的按钮会将其文本更改为报告 已生成
  8. 我已经成功生成了报告(新标签和下载方法),但我的问题是我不知道如何检测该标签是否已完成加载,而我不能做第7步。任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您可以使用Spring Websocket将代的状态发送回JavaScript,就像这样

<script type="text/javascript">
    $(function () {
        var socket = new SockJS("${createLink(uri: '/stomp')}");
        var client = Stomp.over(socket);

        client.connect({}, function () {
            client.subscribe("/topic/generatePdf", function (message) {
                console.log(message);
                $("#bnt").value(JSON.parse(message.body));
            });
        });
        $("#bnt").click(function() {
            client.send("/app/generatePdf", {}, JSON.stringify({
                'type': 'foo',
                'id':2
            }));
        });
    });
</script>