我的问题是:通过 PHP 的header('Content-Disposition: attachment
下载文件后......技术,发起下载的网页具有document.readyState
值 interactive
.
我希望这是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.readyState
先loading
然后interactive
,但状态保持不变,永远不会移动到complete
,从而禁用早期的JavaScript函数...
我不知道为什么会这样,并希望在任何方向上提供任何帮助。
您的页面第一次具有complete
readyState
时,您知道它已完全加载并且您的脚本可以运行。当用户单击未离开页面的链接(例如仅执行文件下载的页面)时,您可以忽略生成的readyState
。因此,您可以检查页面是否曾经出现在complete
readyState
中,而不是检查所有脚本中的readyState
。
将readyState
设置为interactive
背后的理由可能是,从技术上讲,不同的页面已经加载,但从未呈现,也没有进入历史记录。但我只是猜测。正如您在小提琴中看到的那样,行为似乎不一致。