用javascript获取变异网址

时间:2012-03-28 08:59:55

标签: javascript jsp microstrategy

我有以下问题:

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

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

我正在尝试捕获此pdf网址并将其发送到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保存到磁盘中。

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

3 个答案:

答案 0 :(得分:0)

您的主要问题是您正在呼叫getSrc,而不是将其传递给setTimeout(您实际上是将null传递给setTimeout,除非第二次呼叫{{} 1}}碰巧工作,在这种情况下你传递一个字符串,getSrc由于“语法错误”而无法处理。

相反,使用setTimeout - setTimeout(getSrc,5000);后没有括号。这传递了函数,而不是结果。

此外,getSrc错误,部分原因是currentUrl.substr(length-5)未定义(您需要length),部分原因是您需要currentUrl.length才能获得最后四个字符

答案 1 :(得分:0)

我不知道您对MicroStrategy有什么样的访问权限,但是有一个MicroStrategy java api可以让您执行文档并获取pdf而无需捕获URL。 查看他们的知识库以获取示例。

答案 2 :(得分:0)

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

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

不确定这些参数,最好的方法是找出它们(除了一些MicroStrategy TN)之外是以PDF格式导出报告并检查网址。