【问题标题】:Detect if a tab/download has finished loading in JavaScript检测标签/下载是否已在 JavaScript 中完成加载
【发布时间】:2015-08-11 09:27:20
【问题描述】:

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

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

主要步骤:

  1. 点击生成报告按钮。
  2. 该按钮将其文本更改为 Generating Report,请 等等……
  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. 标签(或下载)将加载至少 5 秒到 1 分钟左右。
  6. 该选项卡上的 pdf 将完成加载,用户现在可以浏览 pdf(向下滚动、保存、打印等);或者如果是下载文件,他现在可以打开该文件。
  7. 调用选项卡上的按钮将其文本更改为 Report 已生成

我已经成功生成了报告(新标签和下载方法),但是我的问题是我不知道如何检测该标签是否已完成加载,我做不到第 7 步。谁能帮我实现这个?

【问题讨论】:

标签: javascript pdf grails


【解决方案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>

【讨论】:

    猜你喜欢
    • 2011-10-28
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多