我的应用程序信息页面上有一个下载pdf的下载按钮。我还为所有页面设置了window.onbeforeunload事件,以启动我的加载屏幕微调器,window.onunload事件终止了加载屏幕。我遇到的问题是,当我下载我的pdf文件时,下载工作正常,但是window.onbeforeunload事件被触发而不是window.onunload(因为我没有离开页面)。这导致我的加载页面在我下载文件时开始,并且从不停止,使页面看起来在下载时挂起。
我正在使用下面的htm和javascript下载我的SystemInfo.pdf文件:
<a href="#" onclick="SystemInfo()">Download System Info</a>
function SystemInfo(){
var url = 'xxxxx/about/SystemInfo?isajax=true';
window.location = formatURL(url);
}
我试图更改链接以使用“下载”属性,但这与Safari和IE不兼容,这是Chrome和Firefox的要求。我还添加了一个动态iframe来解决这个问题但是被告知这是不可取的。如果你能提供帮助,请告诉我。
答案 0 :(得分:1)
我设法找到一种解决方法,感觉很顺利,并不像添加iframe一样下载。
我在SystemInfo()函数外部创建了一个js变量(oldUnloadValue),我在window.onbeforeunload中分配了原始函数。然后我将window.onbeforeunload设置为我创建的一个单独的函数,它将window.onbeforeunoad设置回原来的状态。这使得window.onbeforeunload在文件下载过程中无效,但在下载完成后重置功能。</ p>
var oldUnloadValue;
function SystemInfo() {
oldUnloadValue = window.onbeforeunload;
window.onbeforeunload = ResetOnBeforeUnload;
var url = 'xxxxx/about/SystemInfo?isajax=true';
window.location = formatURL(url);
};
function ResetOnBeforeUnload() {
window.onbeforeunload = oldUnloadValue;
};
以这种方式做事已经解决了我的问题,但仍然感觉不太理想。
答案 1 :(得分:1)
您有两种可能性来正确管理onbeforeunload事件。您可以: