我正在尝试使用javascript从FTP下载文件,为此我创建了以下主题:
从那里我了解到我可以使用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);
但两者结果相同:它会打开一个窗口,并立即关闭它。我只看到它的一小部分!
答案 0 :(得分:3)
我知道这不能回答你的问题,我相信你知道这一切。我正在回答更多,因为我没有经常提到这一点。 :)
Silverlight对客户端交互的支持非常有限。 Javascript是一个垫片,在我看来过度使用试图绕过Silverlight架构的东西。微软很容易在Silverlight中包含FTP支持,但出于某种原因将其排除在外。
但是,Silverlight对Web服务交互有很大的支持。因此,获取文件的推荐方法是调用将为您进行FTP传输的Web服务,然后通过Web服务将内容发送到Silverlight应用程序。甚至可以在Web服务端处理任何业务逻辑等。
就像我说的那样,我怀疑你的要求是不使用网络服务(最有可能将带宽成本传递给用户)。但是了解更多有关您的业务问题而不是您所选择的解决方案的技术问题会很有趣。
答案 1 :(得分:2)
它会关闭,因为它会触发文件下载。你可以打开两个窗口 - 一个用于消息,一个用于下载文件,但我知道用户会知道它正在下载...
答案 2 :(得分:2)
如果我是你,我会打开一个页面,其中包含您想要向用户显示的任何视觉/ UI内容,并且要么具有重定向到下载URL的META标记,要么具有javascript blurb to火下载说下载。这样,您的窗口将保持打开状态,但下载仍将自动开始。
答案 3 :(得分:1)
保持开放使用
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';
或建立正常链接
答案 4 :(得分:0)
请记住,浏览器并不意味着“显示”(无论如何)视觉上的FTP协议,并不是所有浏览器都会支持它。如果您想允许用户下载某些内容,请考虑使用普通的http://协议,并按照其他人的建议正常打开一个窗口。
如果您确实需要通过FTP托管下载,请考虑您的后端摄取(和缓存)文件并通过http将其返回给用户
答案 5 :(得分:0)
在浏览器方面没有任何东西需要解析,因此它会关闭。如果你想让页面打开,你就会有些脏东西。就像创建一个html(或php)页面并提供您希望用户看到的内容一样,然后使用隐藏的i帧来调用FTP内容。
这样,您的用户就会看到您希望他们看到的内容,并且正在下载该文件。
答案 6 :(得分:0)
我遇到了完全相同的问题,Silverlight打开一个下载文件的新窗口会短暂地闪烁一个空白窗口,它会在没有文件下载的情况下再次消失。
这似乎发生在IE 8中(不是9及以上),可以通过进入工具 - >互联网选项 - >安全性然后点击自定义级别...(对于您的网站所在的任何区域)来修复并转到下载 - >自动提示文件下载并确保已启用(我也在下面启用了文件下载)。 IE 9 +中似乎没有此自动提示文件下载设置。
另一种解决方法是不在新窗口中打开,如果目标网址立即下载文件,它将不会更改当前窗口,因此UX没有区别:
HtmlPage.Window.Navigate(new Uri("\download.ashx?fileid=12345"));