За последние 24 часа нас посетили 18872 программиста и 1623 робота. Сейчас ищут 923 программиста ...

Как получить данные из opener в open

Тема в разделе "JavaScript и AJAX", создана пользователем melihovgv, 7 ноя 2012.

  1. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Есть родительское окно

    Код (Text):
    1.  
    2. <script type="text/javascript">
    3. function HTML_edit( action )
    4. {
    5.         area = document.getElementById('textfield'); // получаем объект поля ввода
    6.         area.focus(); // перед началом работы переводим фокус на текстарею (иначе в IE не будет работать)
    7.  
    8.         // получаем выделенный текст и подготавливаем его к обработке
    9.         if( document.getSelection )
    10.         {
    11.             document.getSelection();
    12.  
    13.             avalue = area.value;
    14.             sel_length = avalue.length;
    15.             sel_start = area.selectionStart;
    16.             sel_end = area.selectionEnd;
    17.            
    18.             left_side_text = avalue.substring(0, sel_start);
    19.             selected_text = avalue.substring(sel_start, sel_end);
    20.             selected_text1 = avalue.substring(0, sel_start);
    21.             right_side_text = avalue.substring(sel_end, sel_length);
    22.         }
    23.         // для остальных браузеров (IE), не понимающих работу с «выделениями», приведенную выше
    24.         else if( document.selection ) selected_text = document.selection.createRange().text;
    25.        
    26.         // обрабатываем выделенный текст на основе переданного аргумента action
    27.         switch( action )
    28.         {
    29.  
    30. case 'tegImage2':
    31.  
    32. if(!selected_text )
    33. {
    34. var openWindow = window.open("post.html","","width=600,height=430");
    35.  
    36. var url = ???;//Как получить сюда переменную из дочернего окна
    37.  
    38. prefix = '<img src="/foto/'+ url +'">';
    39. suffix = '\n';
    40.  
    41.  
    42. }
    43. break;
    44.  
    45.  
    46.         }
    47.        
    48. // возвращаем результаты работы функции обратно в поле ввода текста
    49. if( prefix != null && suffix != null )
    50.         {
    51. if( document.getSelection ) area.value = left_side_text + prefix + selected_text + suffix + right_side_text;
    52. else if( document.selection ) document.selection.createRange().text = prefix + selected_text + suffix;
    53.         }
    54.     }
    55. </script>
    56.  
    57.  
    58. <input type="button" value="IMG2"  onclick="HTML_edit('tegImage2')"  />
    59.  
    60. <textarea style="width:70%;height:350px" wrap="off" id="textfield"></textarea>
    Есть дочернее окно

    Код (Text):
    1. <html>
    2. <head>
    3. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    4.  
    5. </head>
    6. <body>
    7. <h2>Введите данные изображения</h2>
    8. <input id="myID">
    9.  
    10. <input type="button" value="Готово"
    11.        onclick="
    12. window.opener.HTML_edit (document.getElementById ('myID').value);
    13.                 self.close ()">
    14. </html>
    Как получить переменную в var url из дочернего окна???
     
  2. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Верно, что нужно обращаться к свойству "opener", но всё остальное..
    Вот ввели вы что-то в дочернем окне, нажали кнопку, в родительском окне вызвалась функция "HTML_edit". Переданный параметр оказался в переменной "action". Эта переменная внутри функции встречается только в "switch(action)". И если у переменной будет значение "tegImage2", только тогда зачем-то откроется опять такое-же дочернее окно, какое было только что.
    Как работает код понятно, а вот что требуется, не понятно.
    В функции ещё есть поиск выделенного текста, но выделение будет сбрасываться, если кликать по кнопкам и открывать окна. Так что тем более не понятно.
    Опишите подробней функционал.
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Видимо он имеет ввиду, передать объектную переменную из одного окна в другое =)

    Если окна находятся в одном объекте и открываются когда запрашиваете, то можно это сделать глобальной переменной этого объекта.

    И отдавать окнам.
     
  4. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    но как это сделать, можно пример?
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Никогда не занимался таким.
    Но думаю это возможно.
     
  6. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Передать переменную как в дочернее, так и в родительское окно легко.
    Объясните, что нужно то? Что значит "передать объектную переменную" или "если окна находятся в одном объекте" или "можно это сделать глобальной переменной этого объекта"?
    melihovgv, ты можешь сформулировать мысль? Я ведь этого от тебя и добиваюсь. Если сможешь сформулировать, то уже пол-дела сделаешь. Возможно, даже код тебе напишу, лишь бы понятно было.
     
  7. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    открываю дочернее окно var openWindow = window.open("post.html","","width=600,height=430");
    В дочернем окне будет загрузка фото ajax, которое после загрузке будет передаваться в еще один инпут для передачи в родительское окно.
    Пока дочернее окно открыто, вот этот код не должен выполнятся в
    prefix = '<img src="/foto/'+ url +'">';
    suffix = '\n';
    После получаю сюда переменную
    var url = /*Переменная из дочернего окна.*/;

    За тем просто выполняется этот код
    prefix = '<img src="/foto/'+ url +'">';
    suffix = '\n';

    И все.
     
  8. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Фото будет передаваться в ещё один инпут, как? Имеете ввиду адрес и имя загруженной картинки будут известны после загрузки картинки?

    Если так, подтверди. Напишу код.
     
  9. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Да, адрес картинки будет передаваться в еще один инпут.

    Добавлено спустя 37 секунд:
    Будет использовано в этой форме больше трех инпутов.
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Дело в том, что ты ожидаешь, что скрипт остановится при открытии дочернего окна, но работа скрипта продолжается несмотря на то, что мы открыли окно.
    Код (Text):
    1. var openWindow = window.open("post.html","","width=600,height=430");
    2. var url = ???;//Как получить сюда переменную из дочернего окна
    3. prefix = '<img src="/foto/'+ url +'">';
    Это не prompt и не confirm, на которых скрипт останавливается и ждет, пока не получит ответ от пользователя.
    Можно использовать функцию window.openDialog, в которой указать доп. свойство, что оно модальное - скрипт в главном окне остановится и будет ждать закрытия дочернего окна. Тогда из этого модального окна можно в главное отправить имя загруженного файла. https://developer.mozilla.org/en-US/docs/DOM/window.openDialog
    Либо нужно из дочернего окна вызывать отдельную функцию в главном окне.
    Лучше изменить логику работы. Сохранить на время выделенный текст, открыть окно. Из окна вызвать функцию в главном окне, которая и вставит html в текстовое поле.
     
  11. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    А куда выделенный текст сохранять?
     
  12. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    В переменную, объявленную вне функции, например.
    Код (Text):
    1. var selection;
    2. function abc(){
    3.   //тут дадим этой переменной значение
    4.   selection = ...
    5.   //открываем окно
    6.   window.open("post.html",...
    7. }
    8. //эту функцию вызываем из дочернего окна как window.opener.def(document.getElementById('myID').value)
    9. function def(param){
    10.   if(selection != undefined){ //если в переменной что-то есть
    11.     //вставляем html в текстовое поле, используем param, переданный из доч. окна
    12.   }
    13. }
    В переменной selection можно держать объект, в котором собрать все нужные переменные.
    Код (Text):
    1. var selection;
    2. //далее в функции создаем объект
    3. selection = {};
    4. selection.left_side_text = ...
    5. selection.selected_text = ...
    6. selection.right_side_text = ...
    Это удобно, чтобы не плодить глобальные переменные.
     
  13. melihovgv

    melihovgv Активный пользователь

    С нами с:
    2 мар 2011
    Сообщения:
    285
    Симпатии:
    0
    Адрес:
    Москва
    Идея прикольная некоторые моменты пробую сам сейчас, но получается нужно переделывать полностью код. А на нем уже много что работает) Мне бы по проще, если можно. Передать переменную в выше написанную мною функцию.