Web applications 使用ajax调用下载文件时,避免触发window.onbeforeunload

Web applications 使用ajax调用下载文件时,避免触发window.onbeforeunload,web-applications,onbeforeunload,download,Web Applications,Onbeforeunload,Download,我的应用程序信息页面上有一个下载按钮,可以下载pdf。我还为所有页面设置了window.onbeforeunload事件以启动加载屏幕微调器,window.onunload事件将终止加载屏幕。我遇到的问题是,当我下载pdf文件时,下载工作正常,但会触发window.onbeforeunload事件,而不是window.onunload(因为我不会离开页面)。这会导致我的加载页面在下载文件时启动,并且从不停止,从而使页面在下载时看起来挂起 我正在使用以下htm和javascript下载我的Syst

我的应用程序信息页面上有一个下载按钮,可以下载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);
}

函数SystemInfo(){
var url='xxxxx/about/SystemInfo?isajax=true';
window.location=formatURL(url);
}

我试图改变链接以使用“下载”属性,但这与Safari和IE不兼容,这是Chrome和Firefox的一项要求。我还添加了一个动态iframe来触发中的更改,但有人告诉我这是不可取的。如果您能提供帮助,请告诉我。

我已经找到了一种方法来解决这个问题,这种方法感觉很流畅,不像添加iframe下载那样令人讨厌

我在SystemInfo()函数之外创建了一个js变量(oldUnloadValue),我在window.onbeforeunload中为其分配了原始函数。然后,我将window.onbeforeunload设置为我创建的单独函数,该函数将window.onbeforeunoad设置回其原始状态。这让我们可以在文件下载期间启动window.onbeforeunload,而不会产生不良影响,但下载完成后会重置功能

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;
};

这样做已经解决了我的问题,但仍然感觉不太理想。

有两种方法可以正确管理onbeforeunload事件。您可以:

  • Add target=“\u blank”:因此不会激发onbeforeunload
  • 或者在javascript SystemInfo函数中,立即或在特定时间后取消微调器
    • stopSpinner()或setTimeout(stopSpinner,1000)