Новое открытое окно открывается, но закрывается немедленно - PullRequest
6 голосов
/ 17 марта 2011

Я пытаюсь загрузить файл с FTP с помощью javascript, для которого я создал следующую тему:

Можно ли загрузить файл с FTP с помощью Javascript?

Оттуда я узнал, что могу использовать window.open('ftp://xyz.org/file.zip'); для загрузки файла.Он открывает браузер новое окно, но окно закрывается немедленно.

Как я могу заставить его остаться открытым?

На самом деле я делаю все это в приложении Silverlight:

Вот код:

HtmlPage.Window.Eval("window.open('" + url+ "', 'Download', 'height=500,width=800,top=10,left=10');");

Я тоже пробовал,

string targetFeatures = "height=500,width=800,top=10,left=10";
HtmlPage.Window.Navigate(new Uri(url), "_blank", targetFeatures);

Нооба результата одинаковы: он открывает окно и немедленно его закрывает.Я вижу это только на долю секунды!

Ответы [ 7 ]

3 голосов
/ 29 августа 2011

Я знаю, что это не отвечает на ваш вопрос, и я уверен, что вы знаете все это.Я отвечаю больше, потому что я не вижу, чтобы этот вопрос поднимался часто.:)

Silverlight имеет очень ограниченную поддержку клиентских взаимодействий.Javascript - это шим, который, по моему мнению, слишком часто используется, чтобы попытаться обойти то, против чего был спроектирован Silverlight.Для Microsoft было бы очень легко включить поддержку FTP в Silverlight, но по какой-то причине это было исключено.

Однако Silverlight имеет отличную поддержку для взаимодействия с веб-сервисом.Поэтому рекомендуемый способ получения файла - вызвать веб-службу, которая выполнит FTP-передачу для вас, а затем отправить содержимое в приложение Silverlight через веб-службу.Возможно, даже обрабатывать его на стороне веб-службы для какой-либо бизнес-логики и т. Д.

Как я уже сказал, я подозреваю, что ваше требование состоит в том, чтобы не использовать веб-сервис (скорее всего, для передачи затрат на пользователя).Но было бы интересно узнать больше о вашей бизнес-проблеме, а не о технической проблеме для решения, которое вы выбрали.

2 голосов
/ 30 августа 2011

Если бы я был вами, я бы открыл страницу, на которой есть все, что нужно визуальному / пользовательскому интерфейсу, которую вы хотели бы показать пользователю, и либо имел бы метатег, который перенаправляет на URL-адрес загрузки, либо содержал бы javascript. Отключить сказал скачать. Таким образом, ваше окно останется открытым, но загрузка все равно начнется автоматически.

2 голосов
/ 17 марта 2011

Закрывается, потому что запускает загрузку файла. Вы можете открыть два окна - одно для сообщения и одно для загрузки файла, но я думаю, что пользователь будет знать, что он загружается ...

1 голос
/ 01 сентября 2011

, чтобы держать его открытым, используйте

var test = window.open();
test.location = 'ftp://openbsd.org.ar/pub/OpenBSD/2.0/arc/kernels/bsd.ecoff';

и чтобы не открывать окна, используйте

window.location = 'ftp://openbsd.org.ar/pub/OpenBSD/2.0/arc/kernels/bsd.ecoff';

или сделайте нормальную ссылку

0 голосов
/ 19 января 2016

У меня была точно такая же проблема: Silverlight, открывающий новое окно для загрузки файла, кратковременно вспыхивал пустым окном и снова исчезал без загрузки файла.

Похоже, что это произошло в IE 8 (не 9 и выше), и это можно исправить, перейдя в Сервис-> Свойства обозревателя-> Безопасность, затем выберите Пользовательский уровень ... (для любой зоны вашего сайта) и перейдите в Загрузки-> Автоматические запросы на загрузку файлов и убедитесь, что это включено (у меня также включена загрузка файлов ниже). Эта автоматическая подсказка для загрузки файлов отсутствует в IE 9+.

Другой обходной путь - не открывать в новом окне, если целевой URL немедленно загружает файл, это не изменит текущего окна, поэтому в UX нет разницы:

HtmlPage.Window.Navigate(new Uri("\download.ashx?fileid=12345"));
0 голосов
/ 01 сентября 2011

Ничего не нужно анализировать на стороне браузера, поэтому он закрывается.Если вы хотите открыть страницу, вам придется сделать что-то грязное.Как создание html (или php) страницы и предоставление контента, который вы хотите видеть пользователю, затем со скрытой i-рамкой, которая будет вызывать содержимое FTP.

Таким образом, ваш пользователь увидит контент, который вы хотитеих видеть, и файл загружается.

0 голосов
/ 01 сентября 2011

Помните, что браузер не предназначен для «отображения» (в любом случае визуально) протокола FTP, и не все браузеры поддерживают его.Если вы хотите разрешить пользователю загружать что-либо, рассмотрите возможность использования обычного протокола http: // и обычного открытия окна, как предлагали другие.

Если вам действительно нужно, чтобы загрузка была размещена через FTP, подумайте, как ваш бэкэнд принимает (и кэширует) файл и возвращает его пользователю через http

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...