2011-11-30 120 views
1

这是一个非常复杂的场景,所以请随身携带。POST到打开的JavaScript窗口并让Flash关闭窗口

我创建了一个从窗体读取POST数据的Flash应用程序。用户单击该按钮,数据将在新窗口中发布到Flash应用程序(_blank)。现在获取数据,然后旋转轮子给用户奖励。如果他们没有赢得一个消息弹出让他们知道他们没有赢。如果他们没有赢,点击确定按钮需要关闭浏览器窗口。

我试过了很多解决方案,似乎唯一的方法是使用JavaScript启动窗口,然后使用ExternalInterface.call('window.close');从Flash动作脚本(3)内关闭窗口,否则窗口不会关闭(我试着只用没有运气window.close和window.close()的)

我知道如何启动与JavaScript的一个新的窗口,但我不知道如何同时启动并POST数据到该窗口(Flash应用程序必须具有POST数据)

这是最佳解决方案吗?有没有一种方法可以比我描述的更容易关闭浏览器窗口?

任何帮助将长久地感谢。

演示在这里可以查看:http://rgwheel.phase-change.org/click.php

回答

2

不知道如果我得到你的权利:) 你想以某种方式得到父窗口表单POST数据到Flash变数在你的子窗口的JavaScript对象?

如果我得到你的权利,这是很简单的:你可以从子窗口中访问父窗口的数据。就在你的子窗口从这个更改JavaScript代码:

var flashvars = {}; 
flashvars.spinID="12345";flashvars.prizeTier="1";flashvars.totalSpins="100";var params = {}; 
var attributes = {}; 
swfobject.embedSWF("rrw_new_Final_ianb.swf", "flashDiv", "775", "819", "10.0.0", false, flashvars, params, attributes); 

进入这个:

var flashvars = {}; 
// here you get access to the form of the parent window 
var parentForm = window.opener.document.getElementsByTagName('form')[0]; 

// and here you can populate your flashvars with values from that form's inputs: 
flashvars.spinId = parentForm.spinID.value; 
flashvars.prizeTier = parentForm.prizeTier.value; 
// and so on. Of course, you can do it with any javascript framework 

var params = {}; 
var attributes = {}; 
swfobject.embedSWF("rrw_new_Final_ianb.swf", "flashDiv", "775", "819", "10.0.0", false, flashvars, params, attributes); 

啊,我beleive你需要使用JavaScript来打开新窗口,而不是形式的target属性。 像这样:

<form action="/" method="post" onsubmit="window.open()"> 

您可以自定义大小,位置和子窗口的其他属性,如显示在这里吧:http://www.javascript-coder.com/window-popup/javascript-window-open.phtml

+0

感谢。这绝对解决了这个问题。我还发现target =“_ blank”也有效。似乎JS可以关闭该窗口,因为它不是父窗口。再次感谢! – Ian

+0

不客气。 – aulizko

+0

IMO,它很奇怪,不是逻辑,即目标=“_空白”打开子窗口。 – aulizko