【问题标题】:New opened window opens but closes immediately新打开的窗口打开但立即关闭
【发布时间】:2016-01-20 01:11:15
【问题描述】:

我正在尝试使用 javascript 从 FTP 下载文件,为此我创建了以下主题:

Is it possible to download file from FTP using 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);

但两者的结果相同:它打开一个窗口,然后立即关闭它。我只看到了几分之一秒!

【问题讨论】:

  • 如果窗口保持打开状态,它的内容是什么?如果浏览器立即下载文件,则没有页面可显示。
  • 是否必须从弹出窗口调用下载?为什么不使用隐藏的 iframe 并设置 content-type / content-disposition
  • 隐藏 iframe 是另一种解决方案,但这并不能解释为什么不同版本的 IE 处理请求的方式不同。 Firefox 和其他浏览器都可以完美处理这些请求。
  • 您能否分享一下答案,您是如何解决此问题的?我什至在这里面临同样的问题......谢谢

标签: c# javascript silverlight


【解决方案1】:

我知道这并不能回答你的问题,我相信你知道这一切。我回答得更多,因为我不经常看到这一点。 :)

Silverlight 对客户端交互的支持非常有限。 Javascript 是一种 shim,在我看来它被过度使用来尝试绕过 Silverlight 架构所针对的东西。 Microsoft 在 Silverlight 中包含 FTP 支持本来很容易,但出于某种原因将其排除在外。

不过,Silverlight 对 Web 服务交互有很好的支持。因此,推荐的获取文件的方法是调用一个 Web 服务,该服务将为您进行 FTP 传输,然后通过该 Web 服务将内容发送到 Silverlight 应用程序。甚至可能在 Web 服务端处理任何业务逻辑等。

就像我说的,我怀疑您的要求是不使用网络服务(最有可能将带宽成本转嫁给用户)。但是,对于您选择的解决方案,更多地了解您的业务问题而不是技术问题会很有趣。

【讨论】:

  • 感谢您的帖子。虽然,我想出了一些其他的解决方案来解决我的问题,但是你的帖子和想法是值得称赞的。 :)
【解决方案2】:

它关闭是因为它触发了文件下载。您可以打开两个窗口 - 一个用于消息,一个用于下载文件,但我想用户会知道它正在下载...

【讨论】:

    【解决方案3】:

    如果我是你,我会打开一个页面,其中包含你想向用户展示的任何视觉/UI 内容,或者有一个重定向到下载 URL 的 META 标记,或者有一个 javascript 简介开火说下载。这样,您的窗口将保持打开状态,但仍会自动开始下载。

    【讨论】:

      【解决方案4】:

      保持开放使用

      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';
      

      或者做一个普通的链接

      【讨论】:

        【解决方案5】:

        请记住,浏览器并不意味着“显示”(无论如何)FTP 协议,并且并非所有浏览器都支持它。如果您想允许用户下载某些东西,请考虑使用普通的 http:// 协议,并按照其他人的建议正常打开一个窗口。

        如果您确实需要通过 FTP 托管下载,请考虑您的后端摄取(和缓存)文件并通过 http 将其返回给用户

        【讨论】:

          【解决方案6】:

          在浏览器端没有要解析的东西,因此它关闭了。如果你想让页面打开,你必须做一些肮脏的事情。就像创建一个 html(或 php)页面并提供您希望用户看到的内容,然后使用隐藏的 i-frame 调用 FTP 内容。

          这样您的用户将看到您希望他们看到的内容,并且正在下载文件。

          【讨论】:

            【解决方案7】:

            我遇到了完全相同的问题,Silverlight 打开一个新窗口来下载文件会短暂地闪现一个空白窗口,然后它会再次消失,而不会发生文件下载。

            这似乎发生在 IE 8(不是 9 及更高版本)中,可以通过进入工具-> Internet 选项-> 安全然后单击自定义级别...(对于您的站点所在的任何区域)并转到到下载-> 自动提示文件下载,并确保已启用(我也在其下方启用了文件下载)。 IE 9+ 似乎没有此自动提示文件下载设置。

            另一种解决方法是不在新窗口中打开,如果目标 url 立即下载文件,它不会更改当前窗口,因此在 UX 上没有区别:

            HtmlPage.Window.Navigate(new Uri("\download.ashx?fileid=12345"));
            

            【讨论】:

              猜你喜欢
              • 2019-06-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多