Проблема закрытия окна (window.close()) в Mozilla и FireFox
Здравствуйте, уважаемые участники.
Недавно начал разбираться с AJAX-ом. Сейчас пишу маленькуя системку администрирования новостей на сайте.
Суть: на "главной" странице есть кнопочка, при нажатии на которую методом open() вызывается всплывающее окно:
<a href="javascript:void(0);" onClick="ShowAddNewsForm();" id="btnAddNews">добавить новость</a>
Сама функция ShowAddNewsForm() находится в подключаемом файле:
function ShowAddNewsForm() {
var options = "";
options += "directories = no,";
options += "height = 200,";
options += "width = 300,";
options += "left = 20,";
options += "top = 200,";
options += "menubar = no,";
options += "location = no,";
options += "scrollbars = no,";
options += "resizale = no,";
options += "status = no,";
options += "toolbar = no";
window.open("news/news_form.html", "_blank", options);
}
news_form.html представляет из себя довольно простой файл:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Добавить новость</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link href="news_form.css" type="text/css" rel="stylesheet">
<script language="JavaScript" src="news_form.js"></script>
</head>
<body>
<textarea id="txt">текст новости</textarea>
<input type="checkbox" id="visible" value="visible"> опубликовать
<input type="submit" id="btnAdd" value="добавить" onClick="AddNews()">
</body>
</html>
news_form.js:
function AddNews() {
var http_request = false;
if (window.XMLHttpRequest) {
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) http_request.overrideMimeType('text/plain');
}
else if (window.ActiveXObject) {
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
http_request.onreadystatechange = function() { alertContents(http_request); };
http_request.open("POST", "news_add.php", true);
http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");
http_request.setRequestHeader("Charset", "windows-1251");
http_request.send("txt="+encodeURIComponent(docume nt.getElementById("txt").value));
}
function alertContents(http_request) {
var resCode = 0;
var resText = "";
if (http_request.readyState == 4) {
if (http_request.status == 200) {
var resText = http_request.responseText;
if(!(/^\d+$/.test(resText))) resCode = 2;
} else {
resCode = 1;
resText = "Не удалось подключиться к серверу.";
}
if(resCode > 0) alert(resText);
else window.close();
}
}
Скрипт news_add.php пытается добавить новость в БД и, если новость успешно добавлена, возвращает id этой новости из таблицы БД. В противном случае возвращается текст ошибки.
Как видно, пока в родительское окно я ничего не передаю. JavaScript проверяет, вернулось ли ID или ошибка. Если ID, то я пытаюсь закрыть окно, иначе - вывод текста ошибки alert-ом.
Проблема:
Mozilla и FireFox ведут себя не очень хорошо - окно вовсе не закрывается сразу. Чтобы оно закрылось, необходимо кликнуть в любое его место. При этом простой вызов window.close(), например, из ссылки в окне
<a href="javascript:window.close();">close</a>
удачно все закрывает.
Помогите, пожалуйста, решить проблему.
С уважением,
Евгений
|