17.05.2013, 00:01
|
Кандидат Javascript-наук
|
|
Регистрация: 17.02.2012
Сообщений: 130
|
|
Вопрос по window.open()
Опять проблема, опять без вашей помощи никак нельзя
Суть такая:
Пользователь через window.open создал окно.
Закрыл браузер ( использовал Opera ). Через некоторое время его открыл, соотвественно открылось и это окно, но оно уже не хочет связываться с своим родительским окном. Как решить сию проблему?
P.S. такая проблема каким то чудесным образом рещается, так как с ней смог разобраться mail)
Заранее благодарен.
|
|
17.05.2013, 08:43
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
может быть они держат связь через куки, а не через связь дочернего и родительского окна?
|
|
17.05.2013, 08:54
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от OklickSpb
|
Через некоторое время его открыл, соотвественно открылось и это окно, но оно уже не хочет связываться с своим родительским окном.
|
Не верю! (с)
|
|
17.05.2013, 13:39
|
Кандидат Javascript-наук
|
|
Регистрация: 17.02.2012
Сообщений: 130
|
|
Поверьте, на самом деле так
|
|
17.05.2013, 13:51
|
Кандидат Javascript-наук
|
|
Регистрация: 17.02.2012
Сообщений: 130
|
|
На всякий случай вот код:
Код родителя:
var OnlineConsultantWindow = null;
var checkWindowOpenInterval = false;
//Функция, в которую приходит ссылка на дочернее окно в случает его(родительского окна) перезагрузки
function reloadCheckOpenWindow(target){
alert("Прием")
OnlineConsultantWindow = target;
if(checkWindowOpenInterval == false){
checkOpenWindow()
}
}
//Функция которая запускается как только загружается окно через window.open
function windowReady(myWindow){
OnlineConsultantWindow.myWindow(OnlineConsultantWindow)
}
//Функция срабатывающая если дочернее окно закрыли
function exitChatWindow(){
OnlineConsultantWindow = null;
clearInterval(checkWindowOpenInterval);
alert("Окно закрыто!");
}
//Функция, которая проверяет открыто ли окно или нет (так как в опере onunload не работает)
function checkOpenWindow(){
checkWindowOpenInterval = setInterval(function(){
if (OnlineConsultantWindow.closed) {
clearInterval(checkWindowOpenInterval);
checkWindowOpenInterval = false
exitChatWindow()
}
}, 200)
}
//Функция вызывающая window.open
$(".OnlineConsultantMax .expand").click(function () {
if(OnlineConsultantWindow != null){
OnlineConsultantWindow.focus();
}else{
var resizable = "resizable=1"
if($.browser.msie)
{
var resizable = "resizable=0"
}
var params = 'directories=0, menubar=0, toolbar=0, location=0, width=520,height=420,toolbar=1,scrollbars=1,'+resizable;
OnlineConsultantWindow = window.open("http://test.ru/tested/test396/chat.php", "ChatWindow", params)
if(OnlineConsultantWindow == null){
alert("Ошибка")
}
OnlineConsultantWindow.focus()
}
})
Код открывшегося окна:
var myWindowTarget
//При первой загрузке окна здесь схраняется ссылка на окно
function myWindow(target){
myWindowTarget = target
}
//Фнукция отправляет ссылку на себя, на случай если пользователь перезагрузит родительское окно
setInterval(function(){
alert("Проверка")
if(typeof window.opener.reloadCheckOpenWindow == 'function') {
alert("отправка")
window.opener.reloadCheckOpenWindow(myWindowTarget)
}
}, 200)
opener.windowReady(true)
Если перезагружать страницы, то все нормально работает, если перезагрузить браузер, то связь теряется, опера не видит window.opener.reloadCheckOpenWindow, типо такой функции нет...
Последний раз редактировалось OklickSpb, 17.05.2013 в 14:15.
|
|
17.05.2013, 13:59
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от OklickSpb
|
На всякий случай вот код:
|
Ты давай полный тестовый пример.
Где одно окно открывает второе и они знать друг друга не знают...
|
|
17.05.2013, 14:16
|
Кандидат Javascript-наук
|
|
Регистрация: 17.02.2012
Сообщений: 130
|
|
Отредактировал сообщение, там весь код, кроме html, думаю он не нужен.
|
|
17.05.2013, 14:33
|
|
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,228
|
|
Сообщение от OklickSpb
|
кроме html, думаю он не нужен
|
Тебе оно видней...
|
|
17.05.2013, 14:38
|
Аспирант
|
|
Регистрация: 01.04.2013
Сообщений: 58
|
|
проверяй, есть ли родитель и если его нету, то показывай фигу юзеру )
Как понимаю проблема в том, что при закрытие браузера у тебя 2 окна открыто, родитель и второе окно. Браузер их сохраняет у себя. И при открытии просто восстанавливает их. Но сами то страницы не знают ничего о предыдущем сеансе)
|
|
17.05.2013, 14:46
|
Кандидат Javascript-наук
|
|
Регистрация: 17.02.2012
Сообщений: 130
|
|
Вот весь код:
Родитель:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<link rel="shortcut icon" href="/images/faviconnew.ico" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<title>OnlineConsultant</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="http://test.ru/css/chat.css" />
<script type="text/javascript">
var OnlineConsultantWindow = null;
var checkWindowOpenInterval = false;
function reloadCheckOpenWindow(target){
alert("Прием")
OnlineConsultantWindow = target;
if(checkWindowOpenInterval == false){
checkOpenWindow()
}
}
function windowReady(myWindow){
OnlineConsultantWindow.myWindow(OnlineConsultantWindow)
}
function exitChatWindow(){
OnlineConsultantWindow = null;
clearInterval(checkWindowOpenInterval);
alert("Окно закрыто!");
}
function checkOpenWindow(){
checkWindowOpenInterval = setInterval(function(){
if (OnlineConsultantWindow.closed) {
clearInterval(checkWindowOpenInterval);
checkWindowOpenInterval = false
exitChatWindow()
}
}, 200)
}
$(document).ready(function () {
$(".OnlineConsultantMax .hide").click(function () {
OCShow();
var n = OnlineConsultantWindow.document.getElementById('OnlineConsultantWindow');
$(n).html("jhgf")
})
$(".OnlineConsultantMin").click(function () {
OCShow();
})
$(".OnlineConsultantMax .expand").click(function () {
if(OnlineConsultantWindow != null){
OnlineConsultantWindow.focus();
}else{
var resizable = "resizable=1"
if($.browser.msie)
{
var resizable = "resizable=0"
}
var params = 'directories=0, menubar=0, toolbar=0, location=0, width=520,height=420,toolbar=1,scrollbars=1,'+resizable;
OnlineConsultantWindow = window.open("http://testtools.ru/tested/test396/chat.php", "ChatWindow", params)
if(OnlineConsultantWindow == null){
alert("Ошибка")
}
OnlineConsultantWindow.focus()
}
})
$(".OnlineConsultantMax .inputInChat").click(function (e) {
e.preventDefault();
inputInChat();
});
$('.OnlineConsultantMax .toName').keypress(function (e) {
if (e.which == 13)
inputInChat();
});
$(".OnlineConsultantMax .send").click(function (e) {
e.preventDefault();
submitMessage();
});
$('.OnlineConsultantMax #message').keypress(function (e) {
if (e.which == 13) {
e.preventDefault()
submitMessage();
}
});
var printOnlineConsultantValue = 0;
$(".OnlineConsultantMax textarea").keypress(function () {
if (printOnlineConsultantValue == 0) {
printOnlineConsultant()
printOnlineConsultantValue = 1;
setTimeout(function () {
printOnlineConsultantValue = 0;
}, 3000)
} else {
return 0;
}
})
$(".managersShow").click(function () {
showManagers();
})
})
function strip(text) {
return text
.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">")
.replace(/"/g, """)
.replace(/'/g, "'");
}
function printOnlineConsultant() {
socket.emit('prints', { toManager: OCThisManager });
}
function showManagers() {
if ($(".OnlineConsultantMax .managersList").css("display") == "none") {
$(".OnlineConsultantMax .managersList").fadeIn(50);
$(".OnlineConsultantMax .managersShow").html("Скрыть");
} else {
$(".OnlineConsultantMax .managersList").fadeOut(50);
$(".OnlineConsultantMax .managersShow").html("Консультанты");
}
}
function getrandom() {
var min_random = 0;
var max_random = 99999999;
max_random++;
var range = max_random - min_random;
var n = Math.floor(Math.random() * range) + min_random;
return n;
}
var id = getrandom();
function submitMessage() {
var msg = strip($(".OnlineConsultantMax #message").val());
if (!msg.replace(/\s+/g, '').length) {
alert("Пустое сообщение не может быть отправлено")
return 0;
}
if (OCThisManager != null) {
var info = { toManager: OCThisManager, msg: $(".OnlineConsultantMax #message").val() }
socket.emit('pMessage', info);
setTimeout(function () {
$(".messeges").scrollTop(9999);
}, 100);
$('.OnlineConsultantMax #message').val('');
} else {
alert("Выберите менеджера")
}
}
function OCShow() {
if ($(".OnlineConsultantMax").css("display") == "none") {
$(".OnlineConsultantMax").css("display", "block");
$(".OnlineConsultantMin").css("display", "none");
$(".OnlineConsultantMin .newMessages").html("");
} else {
$(".OnlineConsultantMax").css("display", "none");
$(".OnlineConsultantMin").css("display", "block");
}
}
</script>
<style type="text/css">
*{margin: 0; padding: 0;}
body {
text-align: center;
background: #fff;
}
.content {
width: 800px;
height: 100%;
margin: 0 auto;
}
</style>
</head>
<body>
<div class="content">
<div id="users">
Список законекченных
</div>
<div class="OnlineConsultantMax" style="display: none;">
<div class="managersList" style="display: block;">
</div>
<div class="chat">
<div class="identifier"><div class="name"></div><div><div class="hide">_</div><div class="expand">*</div></div></div>
<div class="personalMessages">
<div class="messeges" id="messeges_null">
<div class="input">
<p>Введите желаемое имя</p>
<input type="text" class="toName"/><br /><button class="inputInChat">Войти</button>
</div>
</div>
</div>
<div class="printMe"></div>
<div class="control">
<textarea placeholder=" Сообщение..." id="message" disabled="disabled"></textarea>
<span class="managersShow">Скрыть</span>
<input type="button" value="Отправить" id="id" class="send" disabled="disabled"/>
<div style="width: 100%; clear: both;"></div>
</div>
</div>
</div>
<div class="OnlineConsultantMin">
<span class="name">On-line Консультант</span><span class="newMessages"></span>
</div>
</div>
</body>
</html>
открывшийся через windows.open:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" «www.w3.org/TR/html4/strict.dtd»>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<link rel="stylesheet" type="text/css" href="http://test.ru/css/chatWindow.css" />
<!--[if IE]>
<link rel="stylesheet" type="text/css" href="http://test.ru/css/chatWindowIE.css" />
<![endif]-->
<script>
var myWindowTarget
function myWindow(target){
myWindowTarget = target
}
setInterval(function(){
alert("Проверка")
if(typeof window.opener.reloadCheckOpenWindow == 'function') {
alert("отправка")
window.opener.reloadCheckOpenWindow(myWindowTarget)
}
}, 200)
</script>
</head>
<body>
<div id="OnlineConsultantWindow" class="OnlineConsultantWindow">
<div class="managersList">
</div>
<div class="chat">
<table border=0 width=100% height=100%>
<tr>
<td class="identifier">
<div class="name"></div>
</td>
</tr>
<tr>
<td class="personalMessages">
<div class="messeges" id="messeges_null">
</div>
<div class="printMe"></div>
</td>
</tr>
<tr>
<td class="control">
<textarea placeholder=" Сообщение..." id="message" disabled="disabled"></textarea>
<input type="button" value="Отправить" id="id" class="send" disabled="disabled"/>
</td>
</tr>
</table>
</div>
</div>
<script>
opener.windowReady(true)
</script>
</body>
</html>
|
|
|
|