我正在创建一个玩家有弹出窗口的游戏。我试图从父母到播放器2弹出
调用计时器功能我用google搜索并将此代码放在父
中var Popup = window.open("player2.php", "bpPopup",'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=420,height=300,left = 490,top = 262');
Popup.focus();
Popup.calltimer();
并在player2.php中
function calltimer() {
alert('timer 2 called');
}
答案 0 :(得分:0)
将一个加载事件附加到弹出窗口,然后通过弹出窗口window
对象调用该函数。
<script>
var Popup = window.open("./player2.php", "bpPopup", 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=420,height=300,left = 490,top = 262');
Popup.focus();
Popup.addEventListener('load', function() {
Popup.window.calltimer();
}, false);
</script>
See it working(别忘了允许弹出窗口)
答案 1 :(得分:0)
问题是时间问题:window.open
可以在页面加载之前返回,甚至在解析了player2脚本之前 - 因此函数对象还没有存在。
当然,IE,和Edge 等等,直到子页面加载后再从window.open
返回,因此您可以立即调用子函数。在IE中添加load
事件监听器实际上无法工作 - load
在您尝试收听之前会被解雇。
不关心不同浏览器计时的解决方法是:
var Popup;
function test1() {
Popup = window.open("player2.php", "bpPopup", 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=420,height=300,left = 490,top = 262');
}
function player2Ready() {
setTimeout(test2,0);
}
function test2() {
Popup.focus();
Popup.calltimer();
}
从点击事件中调用test1
:
<span onclick="test1()">test</span>
player2Ready
函数使用超时来调用test2
来解析子窗口和父窗口之间的代码执行以进行测试。
function calltimer()
{
alert('timer 2 called');
}
window.onload = function() { opener.player2Ready()};