Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.05.2013, 00:01
Кандидат Javascript-наук
Отправить личное сообщение для OklickSpb Посмотреть профиль Найти все сообщения от OklickSpb
 
Регистрация: 17.02.2012
Сообщений: 130

Вопрос по window.open()
Опять проблема, опять без вашей помощи никак нельзя
Суть такая:
Пользователь через window.open создал окно.
Закрыл браузер ( использовал Opera ). Через некоторое время его открыл, соотвественно открылось и это окно, но оно уже не хочет связываться с своим родительским окном. Как решить сию проблему?
P.S. такая проблема каким то чудесным образом рещается, так как с ней смог разобраться mail)
Заранее благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 17.05.2013, 08:43
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

может быть они держат связь через куки, а не через связь дочернего и родительского окна?
Ответить с цитированием
  #3 (permalink)  
Старый 17.05.2013, 08:54
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от OklickSpb
Через некоторое время его открыл, соотвественно открылось и это окно, но оно уже не хочет связываться с своим родительским окном.
Не верю! (с)
Ответить с цитированием
  #4 (permalink)  
Старый 17.05.2013, 13:39
Кандидат Javascript-наук
Отправить личное сообщение для OklickSpb Посмотреть профиль Найти все сообщения от OklickSpb
 
Регистрация: 17.02.2012
Сообщений: 130

Поверьте, на самом деле так
Ответить с цитированием
  #5 (permalink)  
Старый 17.05.2013, 13:51
Кандидат Javascript-наук
Отправить личное сообщение для OklickSpb Посмотреть профиль Найти все сообщения от OklickSpb
 
Регистрация: 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.
Ответить с цитированием
  #6 (permalink)  
Старый 17.05.2013, 13:59
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от OklickSpb
На всякий случай вот код:
Ты давай полный тестовый пример.
Где одно окно открывает второе и они знать друг друга не знают...
Ответить с цитированием
  #7 (permalink)  
Старый 17.05.2013, 14:16
Кандидат Javascript-наук
Отправить личное сообщение для OklickSpb Посмотреть профиль Найти все сообщения от OklickSpb
 
Регистрация: 17.02.2012
Сообщений: 130

Отредактировал сообщение, там весь код, кроме html, думаю он не нужен.
Ответить с цитированием
  #8 (permalink)  
Старый 17.05.2013, 14:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от OklickSpb
кроме html, думаю он не нужен
Тебе оно видней...
Ответить с цитированием
  #9 (permalink)  
Старый 17.05.2013, 14:38
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

проверяй, есть ли родитель и если его нету, то показывай фигу юзеру )
Как понимаю проблема в том, что при закрытие браузера у тебя 2 окна открыто, родитель и второе окно. Браузер их сохраняет у себя. И при открытии просто восстанавливает их. Но сами то страницы не знают ничего о предыдущем сеансе)
Ответить с цитированием
  #10 (permalink)  
Старый 17.05.2013, 14:46
Кандидат Javascript-наук
Отправить личное сообщение для OklickSpb Посмотреть профиль Найти все сообщения от OklickSpb
 
Регистрация: 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, "&amp;")
          .replace(/</g, "&lt;")
          .replace(/>/g, "&gt;")
          .replace(/"/g, "&quot;")
          .replace(/'/g, "&#039;");
    }

    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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Всплытие событий или что то не так... Кирюха =) jQuery 6 30.03.2013 12:56
var open и window.open testdriver Events/DOM/Window 14 22.10.2012 13:18
Вопрос по each() и перебору строк таблицы battrack jQuery 1 09.02.2012 14:30
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49
Вопрос по window.open B.C.Rich Events/DOM/Window 9 01.10.2010 18:14