0

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

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

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

如果是后者,那么有什么办法可以将document.readyState背面重置为complete

(这是使用 Internet Explorer,如果它有所作为......)


背景:

我有一些 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成为 firstloading和 then interactive,但状态停留在那里,永远不会移动到complete,从而禁用早期的 JavaScript 函数......


我不知道为什么会这样,并且会感谢任何方向的帮助。

4

1 回答 1

0

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

readyState设置to背后的理由interactive可能是技术上,一个不同的页面已经加载,但从未被渲染,也没有进入历史。但我只是猜测。正如您在fiddle中看到的那样,这种行为似乎不一致。

于 2015-03-19T19:29:07.060 回答