actionscript-3 - AS3 ioError 仅在某些浏览器上出现,这是为什么?

标签 actionscript-3 flash

我正在制作一个 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 时,它会返回一个 fil ,就像它应该的那样。

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:Flash 代码

    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/

最佳答案

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

不是解决方案,而是一些故障排除 - Firefox 在请求方面与其他浏览器有何不同?在下文中,ChD =“Chrome 直接调用 API,无需 Flash(有效)”

接受

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

Ch:接受:*/*

IE:接受:*/*

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

也许就是这样,但似乎不太可能。两个有效的方法发送的不仅仅是一个通配符 Accept header 。

用户代理

显然,每个浏览器都会发送不同的用户代理。除了 ChD 发送的内容与 Ch 相同 - 并且前者有效,所以不是这样。

推荐人

Firefox 不发送 Referer。其他人发送:

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

ChD 显然也没有发送 Referer,因为我手动输入了地址。因此 Referer header 可能是问题所在。

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

其他

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

FlashPlayer 版本

FF:11.0.1.152 调试

channel :11.1.102.55

IE:11.0.1.152 调试

更新: IE 还会发送 Flash 版本:x-flash-version: 11,0,1,152 - 但其他浏览器都不会这样做,所以这不是为什么它们不起作用。

关于actionscript-3 - AS3 ioError 仅在某些浏览器上出现,这是为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197279/

相关文章:

flash - 在Flex移动应用程序中处理多个音频流

javascript - 用于网络摄像头录制的 Flash 库,封装在 JS 中?

html - 您可以在 PDF 文件中嵌入 HTML 网页吗?

actionscript-3 - 如何在 Actionscript 3 中构建影片剪辑

ios - iOS相机的图像旋转功能已加入AS3

actionscript-3 - Adobe Air 还是 Flex?

flash - 如何为 Sprite 设置动画?

php - 下载sql表的值以供离线重用

linux - 重新加载 Flash 17 次会导致错误 #2046 并需要重新启动浏览器

用于 HTML5 视频播放的 jQuery 插件?