有什么方法可以将 Sencha Touch 应用程序打包为 Google Chrome 打包应用程序?

Any way to pack Sencha Touch app as Google Chrome packaged app?

我有一个 Sencha Touch 应用程序。现在需要将其分发为 Google Chrome 应用程序。我将 ST 生产构建包装为 Google Chrome 扩展,并在控制台中收到几条错误消息:

  1. index.html 有内联脚本(ST microloader 注入它),但内联脚本在 Google Chrome 应用程序中是不允许的。这似乎可以通过将脚本移动到单独的文件中来解决。有更好的解决方法吗?
  2. window.localStorage 不可用,我被迫使用 chrome.storage 但应用程序积极使用 localStorage。 localStorage 是同步的,chrome.storage 是异步的。我需要编写自己的 ST 适配器才能使用 chrome.storage 还是有更好的方法?现有图书馆?
  3. EvalError:拒绝将字符串评估为 JavaScript,因为 'unsafe-eval' 不是以下内容安全策略指令中允许的脚本源:"default-src 'self' blob: filesystem: chrome-extension-resource:"。我找不到这个问题的确切来源...
  4. 我想我会遇到更多其他问题,当这些问题得到修复并且应用可以继续下一步时...

主要问题是 Sencha Touch(不是 ExtJS)是否可以用于 Google Chrome 应用程序,或者它肯定是错误的,不应该的?如果 Sencha Touch 只是 Google Chrome 应用程序的糟糕解决方案,我需要在这里停下来吗?

  1. 一个单独的 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.

  2. 您可以通过以下方式制作 prefs 包装器,使其比 localStorage 更好:

    • 在应用启动时将 chrome.storage 中的设置加载到内部对象中
    • 观察 chrome.storage.onChanged 事件侦听器中的后续动态变化,这些变化将更新内部对象并向您的应用广播 settingChanged 事件。
    • in prefs.set 方法将值同时放入内部对象和 chrome.storage.
  3. 你使用的某些js库中肯定有eval。最好的解决方案是重构代码以摆脱 eval,否则将页面沙盒化,请参阅 Using eval in Chrome Extensions. Safely.

我没有使用过 Sencha Touch,所以我不能说修改它是否容易或是否值得。
也尝试在他们的支持论坛上提问。