弹出和弹入,就像Gmail聊天窗口一样。

6

我想要像 Gmail 聊天窗口一样弹出一个窗口,同时我也想要像 Gmail 一样实现弹入。

一旦弹出窗口完成,特定的 div 应该在新窗口中打开,而一旦弹入完成,特定的 div 应该放置在原来的位置上。目前,我能够使用以下代码将窗口弹出到新窗口,但我不知道如何弹入。

请注意:一旦弹出完成,特定的 div 应该在另一个窗口中打开,并且主窗口中的变量也应该可以在弹出窗口中访问。

Jsfiddle 中查看演示。

  <script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.js"></script>
    //<![CDATA[ 
    $(function(){
    $('.popup').click(function (event) {
     event.preventDefault();
     window.open($(this).attr("href"), "popupWindow",              
     "width=600,height=600,scrollbars=yes");
    });
   });//]]>  

</script>


</head>
<body>
  <a href="http://google.com" class="popup">google</a>
</body>
</html>

更新

我已经找到了打开div的新窗口选项,代码如下,现在我能够弹出带有div内容的窗口,现在我需要知道如何在弹出窗口中访问变量值以及如何将弹出窗口附加回原始位置。

Jsfiddle演示

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>
      Popup demo
    </title>

    <script type="text/javascript" src="//code.jquery.com/jquery-1.9.1.js">
    </script>

  </head>
  <body>
    <a href="#" class="popup">
      google
    </a>
    <div id="toNewWindow">
      Testing
      <input type="button" onclick="test()" value="click">
    </div>

    <script type="text/javascript">
      //<![CDATA[ 

      $('.popup').click(function (event) {
        event.preventDefault();
        var w = window.open("","myWin","height=400px,width=600px");
        w.document.write( $("#toNewWindow").html() );

        $('#toNewWindow').detach();
      });

      var a=3;
      function test()
      {
        alert(a);
      }
      //]]>      
    </script>
  </body>
</html>

第二次编辑

现在我已经找到了访问opener和child之间变量的方法,代码如下:

现在我的问题是:

如果我在iframe内部的child.html中输入文本框中的内容,则在弹出窗口中不显示。

Opener

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Popup checking</title>
<script type="text/javascript">
var winObj;
function openwindow()
{
    winObj=window.open("","_blank","height=200,width=400,status=yes,toolbar=no,menubar=no,location=no");
    var s=document.getElementById('page').innerHTML;
    console.log(s);
    //var s=document.getElementById('page');
winObj.document.write(s);
    //win.parent.detach(win);

}
function changeValue()
{
    console.log(winObj.document.getElementById('changer').value);
    winObj.document.getElementById('changer').value='changer';
}
</script>
</head>

<body>
   <div id="page">
        <iframe src="child.html" width="100" height="100"></iframe>
   </div>
   <div id="page1">
    <input type="text" id="text1"/>
    <input type="button" value="popup" onclick="openwindow()"/>
    <input type="button" value="changevalue" onclick="changeValue()"/>
   </div>
</body>
</html>

子元素

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">
    function openerChange()
    {
            window.opener.document.getElementById('text1').value="Value changed.."
    }
</script>
</head>

<body>
    <input type="text" value="" id="changer" />
    <input type="button" value="changed" onclick="openerChange()"/>
</body>
</html>

@rps 感谢您的回复,是的,我就是期望那样,我觉得我在问题中已经解释了,但我不知道如何实现。 - Thirumalai murugan
很抱歉打扰,但您是否想在新窗口中弹出一个弹出窗口?如果您需要任何弹出-弹入功能,您可以随时在HTML和JavaScript中进行一些自定义编码,对吧? - Shahe
@Shahe 没问题,但在我的情况下,所有的内容,如图表、销售分析等都将在单个窗口(HTML页面)中显示,有时我们需要将该内容弹出并在另一个监视器(4个显示器)上显示,如果您无法理解我所说的,请回复我,因为我很匆忙,可能没有解释清楚。 - Thirumalai murugan
这个问题已经很老了,但这可能会有所帮助:https://dev59.com/x2445IYBdhLWcg3w3Nsf - Ruben Verschueren
也许你需要编写一个Chrome扩展程序?我不明白你如何能够重新附加新窗口。 - Elise Chant
@EliseChant 那对我来说是个问题 - Thirumalai murugan
2个回答

0
我会在你的窗口扩展页面上创建一个名为"HomeWindow"的命名窗口。 然后,使用类似于你目前使用的方式来扩展窗口,但是不要使用"_blank",而是给它一个特定的名称,比如"ExpandedWindow"。
window.open("http://YourLink.TLD","ExpandedWindow","height=200,width=400,status=yes,toolbar=no,menubar=no,location=no");

然后在弹出的Retract窗口中,在单击函数中使用这些内容。

    window.open(document.URL,"HomeWindow");

    ExpandedWindow.close(); 

你能提供一个小型原型吗?这样对每个人都会有用。 - Thirumalai murugan
好的,这是一个非常基本的工作示例:http://dialoz.com/downloads/PopUp-PopIn.zip - Sean Carroll
我的问题是,当我在邮件ID文本框中输入内容并弹出时,该文本框中没有任何值。请仔细阅读我的问题,并查看我提供的源代码。 - Thirumalai murugan

0

如果我理解问题正确的话,您想在弹出窗口时保留状态。看起来您是从#page节点填充弹出HTML,该节点包含一个iFrame。

首先要知道的是,使用iFrame时,重新父级化iframe节点会导致重新加载,丢失所有状态。很不幸 ;(

如果我是你,我会将所有事件处理和状态管理都放在主窗口中完成。你有点正确。当您打开弹出窗口时,如果主窗口持有状态,您可以将该状态写入已打开窗口的iframe中。同样,当您关闭弹出窗口并且iframe重新安装回主窗口时,您可以使用正确的值初始化它,因为主窗口正在跟踪状态。

如何实现这一点的详细信息...我将留给读者自己去练习。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接