Egret社区

资源配置文件跨域啊啊啊

2014-7-1 10:46
605317
RES.loadConfig
这能不能不加载 直接解析Json啊???
加载远程的又跨域。。。
救命啊~~~
分享到 :
0 人收藏

17 个回复

倒序浏览
dom  圆转纯熟 | 2014-7-1 11:16:12
这种是非常常见的服务器文件访问问题,请搜索一下,正确配置你的服务器来解决跨域问题。框架不负责也无法处理这种访问权限问题。
abel  登堂入室 | 2014-7-1 11:26:08
dom 发表于 2014-7-1 11:16
这种是非常常见的服务器文件访问问题,请搜索一下,正确配置你的服务器来解决跨域问题。框架不负责也无法处 ...

明白你的意思。
flash解决跨域能用crossdomain.xml
但现在js 普通页面也有现成的解决方案
egret封装了这些过程 我不知道能否提供个接口
可以不用loadConfig 而是我把json写在对象里让RES解析。

因为实际情况并非只是把游戏通过简单的ftp传到服务器上,
可能会把资源文件发布到不同的cdn
这样引起的跨域问题
abel  登堂入室 | 2014-7-1 11:31:11
dom 发表于 2014-7-1 11:16
这种是非常常见的服务器文件访问问题,请搜索一下,正确配置你的服务器来解决跨域问题。框架不负责也无法处 ...

并非一定要让框架解决跨域问题,
但因为框架现在的资源解析 貌似只能通过加载的方式,
这样假设实际应用场景是我们无法控制到服务器配置,也就让跨域问题变的更难解决了。
个人觉得
游戏最大的资源问题并非几个字符串,而是图形资源,当然,框架考虑到的问题是很不错的,
能解决各种分发、配置等等的便利性,
但有时候小游戏,这些优势反而变成了劣势,对于某些小游戏而言,只是想把资源独立出来进行分步加载
就已经足够了。
dom  圆转纯熟 | 2014-7-1 11:35:08
abel 发表于 2014-7-1 11:26
明白你的意思。
flash解决跨域能用crossdomain.xml
但现在js 普通页面也有现成的解决方案

请参考JsonAnalyzer类。Egret没有封装任何东西,就是先请求字符串。然后调用JSON解析字符串。如果加载字符串文件都有跨域问题。应该加载任何文件都有跨域问题。你能先说下,你使用什么方式获得的JSON,能不跨域吗?
abel  登堂入室 | 2014-7-1 11:44:40
dom 发表于 2014-7-1 11:35
请参考JsonAnalyzer类。Egret没有封装任何东西,就是先请求字符串。然后调用JSON解析字符串。如果加载字 ...

唉。。
其实我是做淘宝的一个小游戏,
我不知道你是否了解他们的发布系统,
以前做flash小游戏的时候 加载图片就会存在跨域问题,他们在服务端安排了很多crossdomain.xml来解决
而H5的游戏他们也是如此,资源与代码都是分开的,如果再加上配置文件也分开,势必又是一个跨域问题。
所以不跨域肯定是解决不了了。

而加载的数据
我就是RES.loadConfig来加载的resource.json
因为游戏动画很复杂,造成素材很大 我切分了很多个资源文件,第一部只是加载了静态的ui文件,等到真正开始操作的时候才加载动画文件,所以产生了很多json文件,每个json文件都可能跨域。

我不清楚框架本身是否存在一种配置的方式是不需要loadConfig的?
或者是否有个接口类似parseConfig(data:Object);这样的,
那我就可以不用管配置文件在哪 直接写代码里就可以了。
abel  登堂入室 | 2014-7-1 11:51:26
dom 发表于 2014-7-1 11:35
请参考JsonAnalyzer类。Egret没有封装任何东西,就是先请求字符串。然后调用JSON解析字符串。如果加载字 ...

我大概看了框架里RES相关的代码 也看了JsonAnalyzer之类的解析适配器的代码
可能没有很好的理解,我的理解是Analyzer这些类,是为了解决不同的json配置文件结构的,也就是前提是要加载这些文件,而我现在的问题是,根本就不想去加载配置文件。

我觉得框架从目前的情况来讲,比较适合大型游戏以及拥有独立服务器的公司,
而对于一些小游戏会有种杀鸡用牛刀的感觉。

我相信egret,是因为这些天做了这个几万行代码的小游戏,之所以说小,是因为基本上动画的处理,涉及了纸娃娃系统的动画。
而egret的表现非常优秀,当然  我不知道在低端设备的情况,至少在我的小米3跟5s表现很好,甚至我都觉得框架目前来讲,已经足够完善了,其它的addon 只是待团队及网友更多的贡献就足以让整个工作流很方便、快捷了。
dom  圆转纯熟 | 2014-7-1 12:08:44
abel 发表于 2014-7-1 11:51
我大概看了框架里RES相关的代码 也看了JsonAnalyzer之类的解析适配器的代码
可能没有很好的理解,我的理 ...

我问你一个问题:你不加载文件,JSON是怎么到内存里来的?就是问你需要的这个parseConfig接口,传入的这个参数对象是哪来的?不还是加载来的吗?你把从那里来的配置文件路径给RES不就行了吗?这根本不是跨域问题。你有办法拿到不跨域的数据。我问的就是。你从哪拿的?
abel  登堂入室 | 2014-7-1 12:10:20
本帖最后由 abel 于 2014-7-1 12:12 编辑
dom 发表于 2014-7-1 11:35
请参考JsonAnalyzer类。Egret没有封装任何东西,就是先请求字符串。然后调用JSON解析字符串。如果加载字 ...

还有一个想法,不知道框架是否已经实现了。也不知道团队是否觉得有这个必要,
只是我的一个理解是,egret在做类似jquery一样的事情,只是大家专业不同,但必有共同之处,
而jquery在解决跨域方面的问题,也并没有做太多工作,因为毕竟是服务端的问题,
对于目前解决js跨域问题,大致有jsonp, flash, iframe等等的几种,或者更先进的postMessage,
jquery只是提供了一些接口,让我们来操作这几种解决跨域的方法,
而egret貌似并没有这种接口,我看官方的例子,大部分都是演示本地加载json配置文件,而不是远程的,
因为框架的灵活性与轻量性,让加载配置文件这个接口变的很自由,我可以直接RES.loadConfig("http://xx.xx.xx/xx.html", "")就可以加载来自网络的文件了,当然 这个时候也就出现了跨域问题了,
我觉得框架是否应该再加几个接口,类似如下:
parseConfig(data:Object) //加载代码中的object对象直接解析
loadXhrConfig(path) 或者如果像as3的接口的话 loadConfig(path, context) //加载跨域配置文件
而这个接口中做的,可能就是利用postMessage这种,动态write一个iframe等等的处理跨域。

当然 以上只是我的乱思乱想。
abel  登堂入室 | 2014-7-1 12:16:23
dom 发表于 2014-7-1 12:08
我问你一个问题:你不加载文件,JSON是怎么到内存里来的?就是问你需要的这个parseConfig接口,传入的这 ...

是的 没错 就算js文件也是加载的,但我之所以说parseConfig这种接口,
意思就是配置文件不要加载,我直接把配置文件中的信息手动写在一个对象中,那这个对象自然就随着js文件开始就加载了,这样也就不跨域了。

而现在之所以跨域,就是game_min.js是在a.com下的,而RES.loadConfig("b.com/resource.json", "")
浏览器报出了跨域。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|京网文[2014]0791-191号|京ICP证150115号|Egret社区 ( 京ICP备14025619号 )

Powered by Discuz! X3.4 © 2001-2019 Comsenz Inc.

返回顶部