在FireFox中使用window.open的问题

时间:2011-05-16 20:17:33

标签: javascript asp.net firefox

我在Firefox中下载文件时遇到问题。我试图在旧帖子中找到解决方案,但我没有找到任何东西。我知道解决方案非常简单,但我认为今天不是我的幸运日:)。

简单的例子。我尝试从JavaScript调用Web方法并下载文件。

客户代码:

 <script language="javascript" type="text/javascript">
         function Test() {             
             PageMethods.Test(onCompleted);
         }

         function onCompleted(result) {
             window.open(result);                          
         }         
    </script>

........

 <asp:ScriptManager ID="ScriptManager" runat="server" EnablePageMethods="true">
    </asp:ScriptManager>  

    <div>
     <input type=button value="Download" onclick="Test()"/>

    </div>

服务器端:

[System.Web.Services.WebMethod]
public static string Test()
{
  return "\\Files\\test.zip";
}

文件夹'文件'位于Web应用程序的根文件夹中。

对于IE和Chrome,此代码工作正常,我可以下载该文件。但在Firefox中,我收到一个错误:

  应用程序中的服务器错误。

     

HTTP错误400 - 错误请求。

并在url中我可以看到例如: http://localhost:1406/ \文件\ test.zip

如何返回zip文件的正确路径?

4 个答案:

答案 0 :(得分:1)

网址不允许使用反斜杠。

如果文件位于Windows网络服务器根目录下的\ Files \ test.zip,则该文件的正确URL为http:///Files/test.zip

答案 1 :(得分:0)

将服务器端代码更改为:

[System.Web.Services.WebMethod]
public static string Test()
{
    return "/Files/test.zip";
}

网址应使用正斜杠而不是反斜杠。

答案 2 :(得分:0)

通常,您应该使用System.Web.UI.Control类的ResolveUrl方法。但是在静态方法的情况下,有一些workaround solutions

答案 3 :(得分:-2)

替换以下行

[System.Web.Services.WebMethod]
public static string Test()
{
  return "\\Files\\test.zip";
}

这些可能有用......

[System.Web.Services.WebMethod]
public static string Test()
{
  return "\\\\Files\\test.zip";
}