DevelNext – Скачивание файлов в браузере
Встроенный компонент браузер (UXWebView) не имеет функционала для скачивания файлов, вместо этого в окне открывается пустая страница.
Практическим путём удалось определить, что при попытке скачать файл состояние браузера меняется с RUNNING на CANCELLED, отловив данное событие, можно запустить скачивание файла.
1 2 3 4 5 |
$browser->engine->watchState(function($self, $old, $new){ if($old == 'RUNNING' and $new == 'CANCELLED'){ // В данном случае, скорее всего, сервер отдал файл на скачивание } }); |
Но данное событие срабатывает не только на скачивание файлов, из-за других ошибок, например, обрыв соединения, состояние также меняется на CANCELLED, поэтому сначала нужно проверить, на самом ли деле по текущей ссылке расположен файл. Весь функционал для этого есть в пакете jURL.
1 2 3 4 5 |
// Сначала нужно добавить к модулю компонент "Загрузчик" $this->jdownloader->url = $url; $this->jdownloader->checkDownload(function(){ // Если ссылка содержит файл для скачивания, будет вызвана эта функция }); |
Для демо-проекта я переделал предыдущий проект браузер
p.s. Для работы демо должен быть установлен jURL версии 1.0.2 или новее
p.p.s. Некоторые https сайты могут не открываться в браузере DevelNext (этот сайт в том числе), в таком случае нужно обновить java в системе до версии 8u10 или выше, там добавлены новые ssl сертификаты, необходимые для подключения.
p.p.p.s. В демо будет открыта эта страница, вот несколько ссылок для скачивания link1, link2
Fatal error: Uncaught Error: Class ‘bundle\jurl\jURLDownloader’ not found in res://php/gui/framework/AbstractModule.php on line 97, position 39
Как фиксить?
Для работы демо должен быть установлен jURL
https://github.com/TsSaltan/DevelNext-jURL/releases/latest
Установил, все как по инструкции, develnext перезапускал, не помогло…