您好我想在子窗口中从父窗口运行功能
但以下代码不起作用
的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);
twit.php
<script language="javascript" type="text/javascript">
window.opener.setStatus('Login with Twitter!');
window.opener.closeWin();
</script>
我的window.opener问题,它不起作用
请建议一种适用于所有浏览器的方式,并且不与其他代码冲突
谢谢
答案 0 :(得分: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>