仅在某些浏览器上出现AS3 ioError,为什么会这样?

时间:2012-02-08 16:20:55

标签: actionscript-3 flash

我正在通过网址调用谷歌翻译文字转语音服务:

translate.google.com/translate_tts?tl=en&q=example

我让它在Firefox中工作,但由于某种原因它不适用于chrome和safari。哪个可能是问题?

我得到的错误是:

[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://translate.google.com/translate_tts?tl=en&q=example"]

但是当我在浏览器中复制/粘贴URL时,它会返回一个就像它应该的样子。

Flash播放器:

firefox: 10,0,42,34 installed - WORKS
chrome: 11,1,102,55 installed - DOES NOT WORK
safari: 10,0,42,34 installed - DOES NOT WORK

我完全惊呆了。不知道如何进一步调试。

请帮忙


更新1:闪存代码

    public function say(text:String, language:String):void {
        var urlString:String = createGoogleTTSUrl(text, language);
        var url:URLRequest = new URLRequest(urlString);
        //var context:SoundLoaderContext = new SoundLoaderContext(1000, true);
        _sound = new Sound();
        _sound.addEventListener(Event.COMPLETE, loadComplete);
        _sound.addEventListener(ErrorEvent.ERROR, err);
        _sound.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler2);
        _soundChannel = new SoundChannel();
        _sound.load(url); //, context);
    }
 private function ioErrorHandler2(event:IOErrorEvent):void {
        trace(event);
 }

我后来才删除了SoundLoaderContext,但这并未改变任何内容。


更新2:其他有相同问题的人:

本教程也有同样的问题。适用于FF,但不适用于Chrome或Safari。评论中的人报告了类似的错误 (点击演示按钮:) http://active.tutsplus.com/freebies/exclusive/exclusive-freebie-text-to-speech-utility/

1 个答案:

答案 0 :(得分:2)

在嗅探实际请求和响应时,#2032错误的明显原因是Google在Chrome或IE中从Flash调用时回复了404(尚未测试Safari或Opera)。但为什么会返回404?

不是解决方案,而是一些故障排除 - 在请求方面,Firefox与其他人的做法有何不同?在下面,ChD =“Chrome直接调用没有Flash的API(有效)”

接受

FF:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Ch:Accept: */*

IE:Accept: */*

ChD:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

可能是这样,但似乎不太可能。这两个工作不仅仅发送通配符Accept标题。

用户代理

显然,每个浏览器都会发送不同的User-Agents。除了ChD发送与Ch相同 - 前者工作,所以不是它。

<强> Referer的

Firefox不会发送任何Referer。其他人发送:

Referer: http://activetuts.s3.amazonaws.com/freebies/006_textToSpeech/tutorial/text2speech.swf

ChD显然也没有发送任何Referer,因为我手动输入了地址。所以Referer标题可能就是问题。

考虑到TTS不是公共API,而是私人端点(用于Google自己的翻译服务),即您真正不被允许使用的端点,这并不奇怪。

其他

除此之外,还有一些语言接受细节(+ cookie内容 - 发送相同的cookie集 - 在我的机器上,它实际上是他们的自己的一次性cookie - Flash曾经有过在Firefox插件中从IE发送cookie的问题...除此之外,请求是相同的,但只有Firefox不会在我的机器上产生404。

FlashPlayer版本

FF:11.0.1.152 Debug

Ch:11.1.102.55

IE:11.0.1.152 Debug

更新: IE还会发送Flash版本:x-flash-version: 11,0,1,152 - 但其他浏览器都不会这样做,因此这不是他们无法工作的原因。