我们构建的 Fluorine 集成有一个非常奇怪的问题。
我们有一个带有验证码的表格;Captcha 图像是从一个创造性地命名的 .Net/AMF 网络服务填充的,GetCaptchaImage.ashx
并且可以从 Flash 中的文本超链接重新加载。
在某些版本的 IE(特别是 IE8,但也可能是其他版本)中,无论IE 版本 emulation和wmode,单击文本链接会导致对我们的 Fluorine 网关的 HTTP 调用成功,但对 web 服务的调用不会跟着它。使用Microsoft Fiddler检查 HTTP 事务,我们看到:
POST http://www.domain.com/gateway.aspx
200 OK (application/x-amf)
没有别的,而在任何其他浏览器中我们看到:
POST http://www.domain.com/gateway.aspx
200 OK (application/x-amf)
GET http://www.domain.com/GetCaptchaImage.ashx
200 OK (image/gif)
进行调用的代码似乎是从 继承的,没有任何覆盖,org.osflash.signals.Signal.dispatch
所以我不明白为什么它不会 Just Bloody Work™。实际的方法调用如下:
private function getNewCaptcha(event:MouseEvent):void
{
getCaptchaAgain.dispatch();
trace("Captcha button click");
GlobalDebugger.log(this, "Captcha button click!");
}
getCaptchaAgain
整个代码库中唯一提到的其他内容是:
public var getCaptchaAgain:Signal = new Signal();
和
compForm.getCaptchaAgain.add(getTheCaptchaAgain);
唯一的其他出现getNewCaptcha
是该行:
_cantReadCaptchaButton.addEventListener(MouseEvent.CLICK, getNewCaptcha);
编辑: Juan Pablo Califano指出我没有注意到有对 的引用getTheCaptchaAgain
,我将其误读为getCaptchaAgain
. 它被定义为
private function getTheCaptchaAgain():void
{
captchaSignal.dispatch();
}
并且只从 调用onFormResponse
,它是无趣的。captchaSignal
定义在
public class CompetitionFormMediator extends AbstractFactoryAccessorMediator
{
[Inject]
public var captchaSignal:CaptchaSignal;
// ...
}
CaptchaSignal
扩展org.osflash.signals.Signal
并且无趣,但在一行中被调用:
signalCommandMap.mapSignalClass(CaptchaSignal, CaptchaCommand);
CaptchaCommand
延伸SignalCommand
并最终在内部flash.events.EventDispatcher
调用
var callFunction:Function = serviceHub.call;
callFunction.apply(serviceHub, collectArgs);
wherecollectArgs
是一个Array
没有提供任何线索的论点。
结束编辑
有谁知道为什么第二个电话不会进入网络服务器?我不明白为什么 Flash 不会发出 HTTP GET
,但同样,我想不出浏览器(更不用说这个浏览器)会抑制它的任何原因。我不是 Flash 开发人员(我在这里管理 .Net 团队),但我看不出有什么奇怪的地方,而且我和 Flash 团队(包括构建代码的开发人员)都想不出任何可能的原因正在发生。
有什么想法吗?