我只在Silverlight应用程序中遇到IE问题。由于Silverlight 2不包含文件下载机制,因此我可以使用自己的设备来提供解决方案。我这样做的方式如下:
HtmlPage.Window.Navigate(new Uri(sb.ToString(),UriKind.Relative));
我的StringBuilder包含带有查询字符串的相对url,该查询字符串是服务器上的* .ashx处理程序,它读取查询字符串,从数据库中获取一些数据,并返回一个Excel文件。
当我这样做时,我只在IE中获得一个被阻止的文件下载栏。我知道这是IE中的一个新的安全“功能”,它被阻止,因为它认为下载不是由用户与网页的交互触发的。用户可以选择允许下载,并且该设置似乎在会话的其余部分中被记住。但是下次他们打开页面时会再次发生。即使站点位于受信任区域,即使弹出窗口阻止程序配置为允许站点弹出窗口。
有谁知道如何让IE知道用户确实请求过这个文件?
答案 0 :(得分:2)
我有完全相同的问题。我的解决方案是不使用HtmlPage.Window.Navigate,而是使用HyperlinkButton并动态设置NavigateUri属性。
如上所述保存和恢复应用状态不起作用。嗯,确实如此,但是无法确定何时需要完成以及何时不需要。所以,最终,它并没有真正起作用。
请参阅有关codeplex的讨论......
http://slideshow2.codeplex.com/Thread/View.aspx?ThreadId=60242
答案 1 :(得分:1)
尝试HtmlPage.PopupWindow而不是HtmlPage.Window.Navigate。这有助于我解决IE默认为Internet区域站点禁用的“自动提示文件下载”设置。
答案 2 :(得分:1)
这是我的代码解决方案,用于打开下载的URL并覆盖IE 8中的自动提示文件下载选项问题。
它也使用 HyperlinkButton ,但所有都是从代码中调用的:
public class BrowserHelper
{
private sealed class HyperlinkButtonCaller : HyperlinkButton
{
public static void OpenUrl(Uri url)
{
var button = new HyperlinkButtonCaller()
{
NavigateUri = url
};
button.OnClick();
}
}
public static void OpenUrl(Uri url)
{
if (url == null)
{
throw new ArgumentNullException("url");
}
HyperlinkButtonCaller.OpenUrl(url);
}
}
BrowserHelper.OpenUrl(new Uri(ClientGlobalInfo.Current.ApplicationUrl, "myhandler.ashx"));
答案 3 :(得分:0)
在我的情况下,第一次(使用IE 7)只发生了一次,也许这种情况发生在你的本地开发实例上?
我认为你无能为力,即使是MSDN网页告诉你“一条消息会出现在...之上”,这可以减轻这个问题:
警告用户该消息将被显示,然后一旦他点击该应用程序重置(将当前应用程序状态存储在隔离的存储中,当您收到重置时重新加载带有设置的应用程序)。
打开一个弹出窗口,然后在弹出包含和标准HTML按钮下载。
HTH 布劳略