Исходное сообщение
Одной из функций моего веб-приложения является то, что оно печатает отчеты.Эти отчеты требуют всплывающего окна, позволяющего пользователю уточнить параметры отчета.Это не может измениться.
До IE9, когда пользователь нажимал мою кнопку «Предварительный просмотр» во всплывающем окне, он получал диалоговое окно, подобное этому, после представления отчета:
Это просто и интуитивно понятно для моих клиентов.
Однако после обновления до IE9 панель сообщений (панель информации / панель загрузки), как бы она ни называлась, отображается в окне PARENT окнавсплывающее окно:
Чтобы загрузить или открыть отчет, пользователь теперь должен закрыть всплывающее окно и затем выбрать соответствующее действие на панели загрузки.,
Это довольно разочаровывающий обходной путь.
Я искал способы в сети, чтобы либо показать панель загрузки во всплывающем окне (предпочтительно), вернуться кстарый диалог или удалите все вместе.
Решений пока нет.Если у кого-то есть какие-либо решения / обходные пути для IE, пожалуйста, опубликуйте их.
Обновление
ОБНОВЛЕНИЕ НА ЭТОМ ОБНОВЛЕНИИ Следующие шаги раскрываютошибка, но не одна, связанная с моей проблемой, как это происходит во всех версиях IE.Я думаю, что это близко, но мне нужно больше тестировать, чтобы получить точную проблему.
Хорошо, так что я посмотрел в коде глубже и сократил его достаточно, чтобы вызвать проблему.Это на самом деле отличается от моей первоначальной проблемы ( grrr ), но, возможно, связано.
Что вам нужно:
Создайте следующие четыре файла:
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>
Теперь сделайте следующее:
- Перетащите все четыре файла в каталог IIS и перейдите к PageOne.htm.
- Нажмите кнопку «Тест»Окно (должно появиться окно DummyDialog.htm)
- Щелкните гиперссылку в этом всплывающем окне (это должно привести к http://localhost/download.aspx?file=MyTestFile.txt)
То, что должно произойти, это то, что вам будет предложено загрузитьВместо этого я получаю пустое окно, которое ничего не делает. См. Ниже:
Если вы берете тот же самый URL http://localhost/download.aspx?file=MyTestFile.txt и вставьте его прямо в новое окно IE или, альтернативно, выполните те же действия, что и выше, в Firefox, вам будет предложено загрузить.
Так почему бы всплывающее окно в IE не принесло ничего, кроме пустого окна