У меня такой вопрос: после загрузки файла через 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
быть первым loading
а потом interactive
но государство остается там, никогда не двигаясь к complete
, таким образом отключая более ранние функции JavaScript …
Я в недоумении, почему это так, и буду признателен за любую помощь, в любом направлении.
первый раз ваша страница имеет readyState
из complete
, вы знаете, что он загрузился полностью, и ваши скрипты могут работать. Когда пользователь щелкает ссылку, которая не удаляется со страницы (например, страницы, которая выполняет только загрузку файла), вы можете игнорировать полученную в результате readyState
, Так что вместо проверки readyState
во всех ваших сценариях вы можете проверить, есть ли на странице Когда-либо был в complete
readyState
,
Обоснование установки readyState
в interactive
может быть, технически, другая страница загрузилась, но никогда не отображалась и не попала в историю. Но я просто догадываюсь. Как вы видели в своем играть на скрипке, поведение кажется непоследовательным.
Других решений пока нет …