Javascript 在<;cfheader>;打开PDF文件?
这是一个冷静的问题 我有一个cfm页面,它有一个按钮,onClick调用页面标题中的以下Javascript函数:Javascript 在<;cfheader>;打开PDF文件?,javascript,coldfusion,Javascript,Coldfusion,这是一个冷静的问题 我有一个cfm页面,它有一个按钮,onClick调用页面标题中的以下Javascript函数: function confirm_expiration_letters() { var resultOfConfirm = confirm("Would you like to send expiration and reminder letters?"); if (resultOfConfirm == true) { document.body.s
function confirm_expiration_letters() {
var resultOfConfirm = confirm("Would you like to send expiration and reminder letters?");
if (resultOfConfirm == true) {
document.body.style.cursor = "wait";
window.location="_expiration_letters.cfm";
}
}
在调用的页面上,生成一系列电子邮件,然后生成PDF报告文件,并使用以下两行显示:
<cfheader name="Content-disposition" value="attachment;filename=#fileName#">
<cfcontent type="application/pdf" file="#docPath#/#fileName#" deletefile="true">
请注意,在JS函数中,光标被更改为“wait”。但在上述cfheader调用后,程序控制似乎丢失,因此我找不到可以将光标重置回的位置:
document.body.style.cursor=“默认”
你知道我可以把它放在哪里来关闭光标动画吗?我尝试了很多地方,但都不起作用。一旦cfheader和cfcontent调用发生,就会失去对上一个窗口和光标的控制。您可以在cfheader上方尝试类似的操作
<script>
document.body.style.cursor = "default";
</script>
<cfflush/>
document.body.style.cursor=“默认”;
问题是这样做可能会(可能会)破坏cfheaders,因为cfflush设计用于刷新部分结果,并且会包含头。但这是我能想到的唯一一件事。您可以在cfheader上方尝试类似的方法
<script>
document.body.style.cursor = "default";
</script>
<cfflush/>
document.body.style.cursor=“默认”;
问题是这样做可能会(可能会)破坏cfheaders,因为cfflush设计用于刷新部分结果,并且会包含头。但这是我能想到的唯一一件事。使用HTML/gif动画显示加载消息,而不是更改光标。当PDF加载时,它将替换加载屏幕 我建议使用一个包含加载消息的隐藏div,然后在需要时使用JavaScript使其显示出来 这里有一些JavaScript。这就是jQuery的实现方式
function confirm_expiration_letters() {
var resultOfConfirm = confirm("Would you like to send expiration and reminder letters?");
if (resultOfConfirm == true) {
$('#Loading').fadeIn(); //SHOW THE LOADING INDICATOR
$.post('PDFGenerator.cfm', function(returnData){ // AJAX POST, CALLBACK
//RETURN THE FILENAME OR LOCATION OF THE PDF
var FileName = $.trim(returnData); // TRIM THE RETURNED DATA
window.open("path_to_file/" + FileName,"_blank"); // NEW WINDOW
$('#Loading').fadeOut(); // HIDE THE LOADING INDICATOR
});
}
}使用HTML/gif动画显示加载消息,而不是更改光标。当PDF加载时,它将替换加载屏幕 我建议使用一个包含加载消息的隐藏div,然后在需要时使用JavaScript使其显示出来 这里有一些JavaScript。这就是jQuery的实现方式
function confirm_expiration_letters() {
var resultOfConfirm = confirm("Would you like to send expiration and reminder letters?");
if (resultOfConfirm == true) {
$('#Loading').fadeIn(); //SHOW THE LOADING INDICATOR
$.post('PDFGenerator.cfm', function(returnData){ // AJAX POST, CALLBACK
//RETURN THE FILENAME OR LOCATION OF THE PDF
var FileName = $.trim(returnData); // TRIM THE RETURNED DATA
window.open("path_to_file/" + FileName,"_blank"); // NEW WINDOW
$('#Loading').fadeOut(); // HIDE THE LOADING INDICATOR
});
}
}如果我理解正确,您希望在准备PDF时使用“等待”光标,然后再返回到标准光标 当您等待请求的文档时,web浏览器不会自动执行此操作吗?IE:在加载文档时,只要执行window.location,光标就会自动变为“wait”,然后在送达文档后,返回到“auto”
这就是我看到的(当运行与您类似的代码时)。这不是您看到的吗?如果我理解正确,您希望在准备PDF时有一个“等待”光标,然后返回到标准光标 当您等待请求的文档时,web浏览器不会自动执行此操作吗?IE:在加载文档时,只要执行window.location,光标就会自动变为“wait”,然后在送达文档后,返回到“auto”
这就是我看到的(当运行与您类似的代码时)。这不是你看到的吗?。。。本周我看到的最模糊的问题有10点:)光标会发生什么变化?它是否停留在等待光标上?单击。。。本周我看到的最模糊的问题有10点:)光标会发生什么变化?它是否停留在等待光标上?是的,根据cfheader的CF引用,将cfflush置于其上方将抛出错误:(无论如何,谢谢你的建议。这就是我所想的。定位一个新窗口如何?是的,根据cfheader的CF参考,将cfflush置于其上方将抛出一个错误。)(无论如何,谢谢你的建议。这就是我的想法。以新窗口为目标如何?cfheader/cfcontents会导致报告加载到PDF中,从而触发Adobe Reader(针对我的情况)加载。我看到打开或取消的提示,打开会在Reader中加载。我认为问题仍然存在,即一旦cfheader触发,程序控制将永远不会返回原始页面。可能我误解了你的建议Josh。对不起,我不完全理解你的顾虑和你试图创造的体验。我想我已经完成了您试图做的事情,向PDF生成页面发出AJAX请求,让PDF生成将文件保存到服务器,然后在AJAX请求完成后使用回调在新的浏览器窗口中打开PDF。PDF将打开,用户将停留在请求页面上。谢谢Josh。您是否能够请看一些代码片段来说明这一点?cfheader/cfcontents会导致报告以PDF格式加载,从而触发Adobe Reader(针对我的情况)加载。我看到打开或取消的提示,打开会在Reader中加载。我认为问题仍然存在,即一旦cfheader触发,程序控制将永远不会返回原始页面。可能我误解了你的建议Josh。对不起,我不完全理解你的顾虑和你试图创造的体验。我想我已经完成了您试图做的事情,向PDF生成页面发出AJAX请求,让PDF生成将文件保存到服务器,然后在AJAX请求完成后使用回调在新的浏览器窗口中打开PDF。PDF将打开,用户将停留在请求页面上。谢谢Josh。您是否能够请看一些代码片段来说明这一点?是的,这是正确的Adam。我确实删除了JS行document.body.style.cursor=“wait”;但是,尽管PDF生成代码本身(在我的沙盒中)需要一瞬间生成,但我插入了一个“sleep”在此之前的5秒,我看不到光标在等待期间从默认箭头模式更改。因此,除非我的CF诱导睡眠被视为触发“等待”模式的合法浏览器事件,否则我看不到完全的