Показать сообщение отдельно
  #1 (permalink)  
Старый 12.11.2007, 06:10
Гость
 
Сообщений: n/a

Проблема закрытия окна (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>

удачно все закрывает.

Помогите, пожалуйста, решить проблему.

С уважением,
Евгений
Ответить с цитированием