我有一个 Sencha Touch 应用程序。现在需要将其作为 Google Chrome 应用程序进行分发。我将 ST 生产版本包装为 Google Chrome 扩展,并在控制台中收到几条错误消息:
- index.html 具有内联脚本(ST 微加载器注入(inject)它),但 Google Chrome 应用程序中不允许内联脚本。这似乎可以通过将脚本移动到单独的文件中来解决。有更好的解决方法吗?
- window.localStorage 不可用,我被迫使用 chrome.storage,但应用程序主动使用 localStorage。 localStorage 是同步的,chrome.storage 是异步的。我是否需要编写自己的 ST 适配器才能使用 chrome.storage 或者有更好的方法吗?现有的库?
- EvalError:拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“default-src 'self' blob:文件系统:chrome-extension-resource: ”。我无法找到这个问题的确切根源...
- 我想我会遇到更多其他问题,当这些问题得到解决并且应用程序可以继续下一步时...
主要问题是 Sencha Touch(不是 ExtJS)是否可以用于 Google Chrome 应用程序,或者它绝对是错误的并且不应该这样做?如果 Sencha Touch 对于 Google Chrome 应用来说只是一个糟糕的解决方案,我是否需要就此停止?
最佳答案
单独的 js 文件是最好的解决方案,否则你将得到 to sandbox the entire page :
You can’t use inline scripting in your Chrome App pages. [...] Chrome extensions will let you relax the default Content Security Policy; Chrome Apps won’t.
您可以通过以下方式制作
prefs
包装器,使其比localStorage
更好:- 在应用启动时将
chrome.storage
中的设置加载到内部对象中 - 关注chrome.storage.onChanged中的后续动态变化事件监听器将更新内部对象并向您的应用广播
settingChanged
事件。 - 在
prefs.set
方法中将值同时放入内部对象和chrome.storage
中。
- 在应用启动时将
- 您使用的某些 js 库中必须有
eval
。最好的解决方案是重构代码以摆脱eval
,否则将页面沙箱化,请参阅 Using eval in Chrome Extensions. Safely.
我没有使用过 Sencha Touch,所以我不能说它是否容易修改或者是否值得付出努力。
也尝试在他们的支持论坛上询问。
关于javascript - 有什么方法可以将 Sencha Touch 应用程序打包为 Google Chrome 打包应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33020256/