解决“Refused to load the script 'blob:https://apps-xxx.apps.fbx.com/xxx”

相信有用unity上架游戏到Facebook Instant Games经历的同学会遇到下面问题导致无法进入游戏:

先来看下官方的解释:

官方的解释是:Facebook的内容安全策略(Content Security Policy, CSP)移除了Blob URL, 因此浏览器会拒绝加载以Blob URL方式加载的脚本,以保护用户免受潜在的不安全内容的影响。

要解决这个问题,Unity WebGL项目需要同时关闭压缩开关(Compression Format)和解压退回开关Decompression Fallback.这两个开关必须同时开启或者同时关闭,为何这么做,先往下看加载framework的流程

同时开启压缩开关(Compression Format)和解压退回开关Decompression Fallback

两个开关同时开启时,unity构建出来核心文件是以.unityweb为后缀的二进制文件,unityLoader.js首先加载压缩后的 .framework.js.unityweb 文件,然后将其内容转换为一个Uint8Array,最后将这个数组传递给一个Blob对象,并创建一个Blob URL来加载和执行它。

这里面使用了Blob URL,因此无法通过Facebook的内容安全策略.

同时关闭压缩开关(Compression Format)和解压退回开关Decompression Fallback

从截图中,可以看到并没有使用Blob URL, 因此目前unity WebGL项目要上Facebook Instant Games平台,需要同时关闭压缩开关和解压回退开关。

需要注意:

  • 如果关闭了压缩开关,却忘记关闭解压回退开关,也会使用到Blob, 因此也不行
  • 如果只开启压缩,不管是用Gzip还是Brotil,也不行,因为Facebook的服务器没有配置brgzgzip响应头,因此客户端浏览器或应用可能无法正确解析和使用服务器返回的压缩数据。
相关推荐
_zhourui_h_19 小时前
Unity WebSocket全平台极限兼容:浏览器禁掉原生 Socket 后,WebGL 到底怎么连服务器?
unity3d
SmalBox20 小时前
【高级着色器】Unity实现-彩虹泡泡着色器
unity3d·游戏开发·图形学
fujisheng6611 天前
从 GetTypes() 到强类型 Route:FUI Source Generator 的设计演进
unity3d
SmalBox1 天前
【动态着色】Unity实现3D扫描线
unity3d·游戏开发·图形学
SmalBox3 天前
【动态着色】Unity 实现消融效果
unity3d·游戏开发·图形学
_zhourui_h_3 天前
我以为 ECSList 已经够快了,直到我直接拿到了 Column
unity3d
SmalBox4 天前
【动态着色】Unity 实现全息投影着色器
unity3d·游戏开发·图形学
SmalBox5 天前
【动态着色】Unity 实现箭头图案
unity3d·游戏开发·图形学
SmalBox6 天前
【扭曲着色器】Unity实现-黑洞扭曲效果
unity3d·游戏开发·图形学
SmalBox7 天前
【扭曲着色器】Unity实现-冰纹理折射
unity3d·游戏开发·图形学