使用javascript获取一个不断变化的url

get a mutating url with javascript

本文关键字:变化 url 一个 获取 javascript 使用      更新时间:2023-09-26

我有以下问题:

我目前正在使用一个软件(MicroStrategy,BI),该软件具有将报告导出为pdf的功能,其工作原理如下:

每个报告都有一个唯一的ID,因此您可以选择要导出的报告,并使用jsp将此报告的ID发送到导出工具,它会生成一个完整的URL,其中包含一些参数,MicroStrategy服务器将读取这些参数以生成PDF。

我正在尝试的是捕获这个pdf url并将其发送到一个Java方法,该方法将把这个pdf保存在硬盘驱动器中,而不会向用户提示任何信息。

我的问题是,这个URL不会立即生成,它需要一段时间,而且,在这个过程中会进行一些重定向。

那么,在这么多闲聊之后,我该如何捕捉那个该死的URL呢?

我正在做的是将pdf加载到一个iframe中,然后用我搜索到的js代码提取url,将其分配给一个JSP变量,然后,一旦我有了pdf url,就调用Java方法。但它不起作用。

JavaScript函数是这样的:

<script language="text/javascript">
    function getSrc()
    {
        var CurrentUrl = document.getElementById('miframe').contentWindow.location.href;
        if(currentUrl.substr(length-5)==".pdf")
        {
           return currentUrl;
        }
        else
        {
           setTimeout(getSrc(),5000);
        }
    }
</script>

这是我给它打的电话:

<% jsp code
    String currentUrl="<script>document.writeln(getSrc();)</script>";
more jsp code %>

其余的代码实际上很好,用一个普通的pdf URL进行了尝试,它将pdf保存到了磁盘中。

希望它是可理解的,并提前感谢!

您的主要问题是,您正在调用getSrc,而不是将其传递给setTimeout(实际上,您正在将null传递给setTimeout,除非对getSrc的第二次调用碰巧起作用,在这种情况下,您正在传递一个字符串,而setTimeout由于"语法错误"而无法处理该字符串。

相反,请使用setTimeout(getSrc,5000);——getSrc后面没有括号。这传递的是函数,而不是其结果。

此外,currentUrl.substr(length-5)是错误的,部分原因是length未定义(需要currentUrl.length),部分原因在于需要-4来获得最后四个字符。

我不知道你对MicroStrategy有什么样的访问权限,但有一个MicroStrategy java api可以让你在不捕获url的情况下执行文档并获取pdf。查看他们的知识库以获取示例。

为什么不将报告/文档以PDF格式保存为默认格式,这样当您打开报告时,它将自动以PDF格式生成。

如果您不喜欢将报告保存为PDF格式(例如,因为您还需要将其作为常规报告,并且不想维护同一对象的两个版本),则可以使用URLAPI使用&executionMode=3&currentViewMedia=32生成PDF。

不确定这些参数,要想弄清楚它们是什么(除了一些MicroStrategy TN),最好的方法是以PDF格式导出报告并检查url。