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

标签 javascript extjs google-chrome-extension sencha-touch

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

  1. index.html 具有内联脚本(ST 微加载器注入(inject)它),但 Google Chrome 应用程序中不允许内联脚本。这似乎可以通过将脚本移动到单独的文件中来解决。有更好的解决方法吗?
  2. window.localStorage 不可用,我被迫使用 chrome.storage,但应用程序主动使用 localStorage。 localStorage 是同步的,chrome.storage 是异步的。我是否需要编写自己的 ST 适配器才能使用 chrome.storage 或者有更好的方法吗?现有的库?
  3. EvalError:拒绝将字符串评估为 JavaScript,因为“unsafe-eval”不是以下内容安全策略指令中允许的脚本源:“default-src 'self' blob:文件系统: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 事件。
    • prefs.set 方法中将值同时放入内部对象和 chrome.storage 中。
  3. 您使用的某些 js 库中必须有 eval。最好的解决方案是重构代码以摆脱 eval,否则将页面沙箱化,请参阅 Using eval in Chrome Extensions. Safely.
<小时/>

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

关于javascript - 有什么方法可以将 Sencha Touch 应用程序打包为 Google Chrome 打包应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33020256/

相关文章:

javascript - Chrome 扩展程序 : Inject javascript into a webpage to perform a ajax request?

javascript - 使用javascript来分割这个字符串 "text[99][text]"

javascript定义cookie

css - 掩码没有延伸到可滚动部分

google-chrome-extension - 隐身模式下的 Chrome 扩展程序

google-chrome-extension - 创建一个选项卡并在其中注入(inject)内容脚本会给出权限错误

javascript - 如何向 roundSlider 添加一些文本标签

javascript - 在 Android 浏览器中禁用触发 touchcancel

java - 加载数据存储Extjs动态指定代理

android - sencha touch 应用程序中不显示文本