使用javascript获取一个不断变化的url
get a mutating url with javascript
我有以下问题:
我目前正在使用一个软件(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
和¤tViewMedia=32
生成PDF。
不确定这些参数,要想弄清楚它们是什么(除了一些MicroStrategy TN),最好的方法是以PDF格式导出报告并检查url。
- 如何使用url加载程序在webpack中导入多个图像
- 使用php或javascript从facebook相册URL中删除多余的部分
- Angular JS IE9 Hashbang url rewriting
- JavaScript下拉菜单-点击按钮并根据所选值重定向到url
- 直接下载文件,而不是从window.open(url)
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- 通过js在新选项卡中有条件地打开url
- 如何在PHP中从外部url中获取动态变化的值
- 使用javascript获取一个不断变化的url
- 为什么不't当我点击一个选项卡时,URL会发生变化
- 当点击带有ionic的链接时,只有URL会发生变化
- 在iframe url发生变化时采取行动
- 如何用jQuery检测URL的变化
- 如何在angular 2中检测URL的变化
- 重新创建lifehacker ajax文章页面刷新,右菜单始终可见,url &条的变化
- jQuery插件更新URL哈希作为文本输入的变化
- 当只有url哈希值发生变化时,我如何重新加载整个页面?
- Jquery - URL不更新选择框的变化
- 在ember应用中,每次url发生变化时,都会触发路由/控制器钩子
- 想要设置警报时,页面url的变化