通过PHP的标头(“内容处置:附件..”)下载文件后,将document.readyState的状态更改为“完成”

changing state of document.readyState to "complete" after downloading file via PHP's header('Content-Disposition: attachment...'

本文关键字:文件 document 状态 完成 下载 readyState 附件 PHP 通过 内容处置      更新时间:2023-09-26

我的问题是:通过 PHP 的header('Content-Disposition: attachment下载文件后......技术,发起下载的网页具有document.readyStateinteractive .

我希望这是complete,因为下载已完成。

我错过了什么,还是这是预期的行为?

如果是后者,那么有没有办法将document.readyState重置回complete

(这是使用IE浏览器,如果它有所作为的话...


背景:

我有一些JavaScript函数,我希望仅在页面完成加载时才激活,所以我使用

if( document.readyState != "complete" ) return;

在他们开始实现这一目标时。这适用于页面加载,因为document.readyState在逐步加载时interactive,并且仅在页面加载完成后complete

在本页的后面,我提供了一个链接,将用户发送到下面的PHP代码,以允许下载加载的数据:

header( 'Content-Type: text/csv; charset=Shift-JIS' );
header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
$output = fopen( 'php://output', 'w' );
//write to file output... 
fclose( $output );

现在,按下此链接会导致document.readyStateloading然后interactive,但状态保持不变,永远不会移动到complete,从而禁用早期的JavaScript函数...


我不知道为什么会这样,并希望在任何方向上提供任何帮助。

您的页面第一次具有complete readyState时,您知道它已完全加载并且您的脚本可以运行。当用户单击未离开页面的链接(例如仅执行文件下载的页面)时,您可以忽略生成的readyState。因此,您可以检查页面是否曾经出现在complete readyState中,而不是检查所有脚本中的readyState

readyState设置为interactive背后的理由可能是,从技术上讲,不同的页面已经加载,但从未呈现,也没有进入历史记录。但我只是猜测。正如您在小提琴中看到的那样,行为似乎不一致。

相关文章: