gpt4 book ai didi

asp.net - IE9 - 下载文件的信息栏出现在父窗口;不是最新的

转载 作者:搜寻专家 更新时间:2023-10-31 21:51:59 24 4
gpt4 key购买 nike

原帖

我的 Web 应用程序的功能之一是它可以打印报告。这些报告需要一个弹出窗口,允许用户细化报告的参数。这不能改变。

在 IE9 之前,当用户在弹出窗口上单击我的“预览”按钮时,一旦报告呈现,他们将看到这样的对话框:

Image 1

这对我的客户来说既简单又直观。

但是,升级到IE9后,消息栏(Information Bar/Download Bar)不管它叫什么,都显示在弹窗的PARENT窗口中:

Image 2

为了下载或打开报告,用户现在需要关闭弹出窗口,然后在下载栏上选择适当的操作。

这是一个非常令人沮丧的解决方法。

我在网上寻找在弹出窗口中显示下载栏(首选)、恢复到旧对话框或将其全部删除的方法。

还没有解决方案。如果有人有任何 IE 解决方案/解决方法,请发布。


更新

更新此更新 以下步骤确实暴露了一个错误,但与我的问题无关,因为它发生在所有版本的 IE 上。我认为它很接近,但我需要进行更多测试才能找到确切的问题。

好的,所以我深入研究了代码并将其削减到足以产生问题。它实际上与我原来的问题 (grrr) 不同,但也许相关。

你需要什么:

  • Windows 7
  • IIS 7.0

创建以下四个文件:

PageOne.htm 包含以下内容:

<html>
<head>
<script type="text/javascript">
window.dialog = new Object();

var myFunc = function() { window.alert('hello')};

function test(){
window.dialog.open('DummyDialog.htm',myFunc,false);
};


window.dialog.open = function(sUrl, fpReturn, bNoResize) {

window.dialog.__returnFunction = fpReturn;
window.dialog.returnValue = null;

window.dialog.arguments = new Array();
for (var x = 2; x < arguments.length; x++) {
window.dialog.arguments[x - 2] = arguments[x];
}

window.dialog.arguments[window.dialog.arguments.length] = window;

sUrl += new Date().getTime().toString();


var sFeatures;
var nWidth = 500; var nHeight = 500; var nLeft = 100; var nTop = 100;

if (window.dialog.position) {
nLeft = window.dialog.position.left;
nTop = window.dialog.position.top;
window.dialog.position = null;
}

if (sUrl.indexOf("?") != -1) {
var pairs = sUrl.split("?")[1].split("&");
var aValue, pos;
for (var i = 0; i < pairs.length; i++) {
if (pairs[i].toUpperCase().indexOf("SIZE") == 0) {
aValue = pairs[i].split("=")[1].split(",");
if (aValue.length == 2) {
nWidth = parseInt(aValue[0]);
nHeight = parseInt(aValue[1]);
break;
} else if (aValue.length == 4) {
nWidth = parseInt(aValue[0]);
nHeight = parseInt(aValue[1]);
nLeft = parseInt(aValue[2]);
nTop = parseInt(aValue[3]);
break;
}
}
}
}

nTop -= 1;

sFeatures = "";

window.dialog.arguments._gotoURL = sUrl;
window.dialog.arguments._dialogTitle = 'my title';
window.dialog.returnValue = window.showModalDialog("DummyDialog.htm", window.dialog.arguments, sFeatures);
};
</script>
</head>
<body>
<a href="#" onclick="test();">Test Window</a>
</body>
</html>

DummyDialog.htm 包含以下内容:

<html>
<head>
<script type="text/javascript">
window.dialog = new Object();

var myFunc = function() { window.alert('hello')};

function test(){
window.dialog.open('DummyDialog.htm',myFunc,false);
};


window.dialog.open = function(sUrl, fpReturn, bNoResize) {

window.dialog.__returnFunction = fpReturn;
window.dialog.returnValue = null;

window.dialog.arguments = new Array();
for (var x = 2; x < arguments.length; x++) {
window.dialog.arguments[x - 2] = arguments[x];
}

if (true) {//if (is.ie) {
window.dialog.arguments[window.dialog.arguments.length] = window;
}

sUrl += new Date().getTime().toString();
// in pixels
var sFeatures;
var nWidth = 500;
var nHeight = 500;
var nLeft = 100;
var nTop = 100;

if (window.dialog.position) {
nLeft = window.dialog.position.left;
nTop = window.dialog.position.top;
window.dialog.position = null;
}

if (sUrl.indexOf("?") != -1) {
var pairs = sUrl.split("?")[1].split("&");
var aValue, pos;
for (var i = 0; i < pairs.length; i++) {
if (pairs[i].toUpperCase().indexOf("SIZE") == 0) {
aValue = pairs[i].split("=")[1].split(",");
if (aValue.length == 2) {
nWidth = parseInt(aValue[0]);
nHeight = parseInt(aValue[1]);
break;
} else if (aValue.length == 4) {
nWidth = parseInt(aValue[0]);
nHeight = parseInt(aValue[1]);
nLeft = parseInt(aValue[2]);
nTop = parseInt(aValue[3]);
break;
}
}
}
}

nTop -= 1;
sFeatures = "";
window.dialog.arguments._gotoURL = 'download.aspx?file=MyTestFile.txt';
window.dialog.arguments._dialogTitle = 'my title';//window.getTitle();
window.dialog.returnValue = window.showModalDialog('download.aspx?file=MyTestFile.txt', window.dialog.arguments, sFeatures);

};
</script>
</head>
<body>
<a href="#" onclick="test();">Test Window</a>
</body>
</html>

download.aspx 包含以下内容:

<%@ Page language="vb" runat="server" explicit="true" strict="true" %>
<script language="vb" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
Dim strRequest As String = Request.QueryString("file") '-- if something was passed to the file querystring
If strRequest <> "" Then 'get absolute path of the file
Dim path As String = Server.MapPath(strRequest) 'get file object as FileInfo
Dim file As System.IO.FileInfo = New System.IO.FileInfo(path) '-- if the file exists on the server
If file.Exists Then 'set appropriate headers
Response.Clear()
Response.AddHeader("Content-Disposition", "attachment; filename=" & file.Name)
Response.AddHeader("Content-Length", file.Length.ToString())
Response.ContentType = "application/octet-stream"
Response.WriteFile(file.FullName)
Response.End 'if file does not exist
Else
Response.Write("This file does not exist.")
End If 'nothing in the URL as HTTP GET
Else
Response.Write("Please provide a file to download.")
End If
End Sub
</script>

MyTestFile.txt 包含以下内容:

<Root>
<Tag>Hello World</Tag>
</Root>

现在执行以下操作:

  1. 将所有四个文件拖到您的 IIS 目录并导航到 PageOne.htm。
  2. 单击测试窗口(应弹出 DummyDialog.htm)
  3. 单击该弹出窗口中的超链接(这会将您带到 http://localhost/download.aspx?file=MyTestFile.txt)

应该会提示您下载。相反,我得到的是一个什么都不做的空白窗口。见下文:

enter image description here

如果你使用相同的 url http://localhost/download.aspx?file=MyTestFile.txt并将其直接粘贴到新的 IE 窗口中,或者在 Firefox 中运行上述相同步骤,系统将提示您下载。

那么为什么 IE 中的弹出窗口只会带来一个空白窗口?

最佳答案

一种解决方案是不使用弹出窗口,而是使用像 jQuery UI 对话框那样的弹出窗口。这将使您对事物有更多的控制权,并且还将它们保持在同一窗口中,这样您的用户就不会错过 ie9 下载栏。

另一种选择可能是在新页面而不是弹出窗口中确定参数。

关于asp.net - IE9 - 下载文件的信息栏出现在父窗口;不是最新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6944672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com