Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测选项卡/下载是否已在JavaScript中完成加载_Javascript_Pdf_Grails - Fatal编程技术网

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

检测选项卡/下载是否已在JavaScript中完成加载,javascript,pdf,grails,Javascript,Pdf,Grails,我使用以下模式在Grails上生成pdf: 可选步骤: 用户将选择下载*.pdf或在其他选项卡上打开它,默认情况下是在其他选项卡上打开它 主要步骤: 单击生成报告按钮 请将按钮的文本更改为生成报告 等等 它将运行JavaScript块,如下所示: var generate = "<sample url>" // some amazing processing goes here that appends data to the // query string. window.op

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

可选步骤: 用户将选择下载*.pdf或在其他选项卡上打开它,默认情况下是在其他选项卡上打开它

主要步骤:

  • 单击生成报告按钮
  • 请将按钮的文本更改为生成报告 等等
  • 它将运行JavaScript块,如下所示:

    var generate = "<sample url>"
    
    // some amazing processing goes here that appends data to the
    // query string.
    
    window.open(generate,'_blank');
    
    var generate=“”
    //这里进行了一些惊人的处理,将数据附加到
    //查询字符串。
    窗口。打开(生成“空白”);
    
  • 然后它会打开一个新标签(或者开始下载,取决于他选择的选项)

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

  • 标签(或下载)将加载至少5秒到1分钟左右
  • 该选项卡上的pdf将完成加载,用户现在可以浏览pdf(向下滚动、保存、打印等);或者,如果是下载,他现在可以打开该文件
  • “呼叫”选项卡上的按钮将其文本更改为“报告” 已生成
  • 我已经成功地生成了报告(包括新选项卡和下载方法),但是我的问题是我不知道如何检测该选项卡是否已完成加载,并且我无法执行步骤7。有谁能帮我实现这个吗?

    你可以用它将生成的状态发送回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>
    
    
    $(函数(){
    var socket=newsockjs(${createLink(uri:'/stomp')});
    var client=Stomp.over(套接字);
    client.connect({},函数(){
    client.subscribe(“/topic/generatePdf”,函数(消息){
    控制台日志(消息);
    $(“#bnt”).value(JSON.parse(message.body));
    });
    });
    $(“#bnt”)。单击(函数(){
    send(“/app/generatePdf”,{},JSON.stringify({
    'type':'foo',
    “id”:2
    }));
    });
    });
    
    看看这篇文章