2013-02-23 60 views
0

您好我想在子窗口调用父窗口功能的JavaScript

运行从父窗口的功能,但下面的代码不起作用

的index.php

//set status message 
function setStatus($html){ 
    $("#data").html($html); 
    } 

//twitter login page handler 
function twitter(){ 
    win = window.open('twit.php','win',"width=882,height=750,toolbar=0"); 
    setStatus('proccess...'); 
    } 

//close window 
function closeWin(){ 
    win.close(); 
    } 

//open new window 
$(".twitterBtn").click(twitter); 

强烈抵制。 php

<script language="javascript" type="text/javascript"> 
window.opener.setStatus('Login with Twitter!'); 
window.opener.closeWin(); 
</script> 

我的问题与window.opener,它不工作

请建议的方式,将在所有的浏览器,不与其他代码

冲突谢谢

+0

https://developer.mozilla.org/de/docs/DOM/window.postMessage – cIph3r 2013-02-23 12:51:51

回答

1

好了,过了一段时间,但我有一个工作的例子。

我使用postMessage进行信息交换,但是,它只是让孩子知道它的父母..但我将这个例子扩展到了父 - 母聊天。好玩:

<html> 
<head> 
    <script> 
     window.addEventListener("load",init,false); 
     window.addEventListener("message",message,false); //register postMessages 

     //we need this because master(original) and slave(=window.open) must do different actions 
     var isSlave=window.location.href.indexOf("slave=true")>0 

     //the other-window (in the slave, this is undefined, until the handshake is complete 
     var popupwindow; 
     if (!isSlave){ 
      popupwindow=window.open(window.location.href+"?slave=true", "_blank",'toolbar=0,location=0,menubar=0'); 
     } 

     // this is called from the child window, after handshake 
     function test(){ 
      var listElem = document.createElement('li'); 
      listElem.innerHTML="handshake succesful!!!!!"; 
      document.querySelector("ul").appendChild(listElem); 
     } 

     function init(){ 
      document.querySelector("button").addEventListener("click",function(){ 
         ////popupwindow.test(); //note this works only if same origin policy allows this, else use postMessages 

       //here we send the message to the other window 
       popupwindow.postMessage(document.querySelector("#inp").value,"*"); 
      },false); 


      //the timetrigger is needed, because opening and initializing the new window takes time, then we perform a handshake to let the new window know his origin 
      setTimeout(function(){ 
      if(!isSlave) 
       popupwindow.postMessage("handshake successful","*");//handsake needed for bidirectional conneciton 
      },200); 


     } 


     //called when receiving a message 
     function message(data){ 

      //needed for bidirectional message 
      if (!popupwindow){ 
       popupwindow=data.source; 
       //popupwindow.postMessage("handshake successful","*"); //send the handshake back to the origin (notification purpose only) //instead, we do test() 
       popupwindow.test(); 
      } 

      //display the message 
      var listElem = document.createElement('li'); 
      listElem.innerHTML=data.data; 
      document.querySelector("ul").appendChild(listElem); 


     } 
    </script> 
</head> 

<body> 
    <button>say hello</button> 
    <input type="text" id="inp" /> 
    <ul></ul> 
</body> 
</html> 
+0

@ clph3r请解释这种方法可以从一个子窗口信息呈现给父窗口移动 如何你是否处理不同的页面? – 2013-02-23 15:23:54

+0

喜欢讨论服务,当你想登录并发送评论与推特账号 – 2013-02-23 15:29:11

+0

@alismith此代码实现父窗口和子窗口之间的聊天。试试吧.. 因此你可以在这两个窗口之间发送任何信息。 – cIph3r 2013-02-23 15:36:16