【问题标题】:AngularJS, Cordova/IonicFramework: load index.hml from serverAngularJS、Cordova/Ionic 框架:从服务器加载 index.html
【发布时间】:2014-10-17 08:39:45
【问题描述】:

背景:

我正在从服务器加载我的整个 AngularJS Cordova/Ionic 网络应用程序。这真太了不起了。我可以在不通过 Apple 的情况下更改应用程序。

问题:

Q1) 如何在我的 index.html 文件中使用从服务器加载的 js-files.zip? Q2) 如何有效地从我的服务器加载 index.html 启动逻辑?

问题:

在一些较旧的设备上,如果我从服务器加载所有 .js 文件,加载时间会太长,因此我希望也能够从服务器配置该逻辑(在 index.html 中)。

我唯一没有从服务器加载的是 index.html 的内容

那么,我如何才能从服务器加载 index.html?

如果我尝试这样做

1) 使用 ajax 提取 indexfromserver.html 并使用 document.write(res) 对 index.html 进行 html 重写,那么 AngularJS 就会出现问题:

例如,模块丢失错误(以下 *1),因为在 ajax 响应重写 index.html 之前,以下内容不在 index.html 中:

<body ng-app="myapp" ng-controller="MainCtrl">

1.1) 我可以在初始的本地 index.html 中包含必要的模块,但是如果我重写 index.html,我会在 ionic 中收到关于 classList null 的这些错误/警告(请向我询问详细信息),deviceready 不是被解雇了,并且 angularjs 加载了不止一次

2) 我可以将 index.html 重定向到 indexfromserver.html,但是我所有的 $http 响应都被拒绝了。

关于 2) 我被告知我应该能够为 indexfromserver.html 添加一个控制器或指定 $urlRouterProvider.otherwise('/app/indexfromserver');

这并没有解决 $http 请求被拒绝的问题。

我不完全了解 index.html 是如何让 $http 正常工作的,因为它没有控制器,也没有提供“否则”路由。到目前为止,我只在 config.xml 中看到提到 index.html。

请求:

有人可以发布一个典型示例的 sn-p,说明 AngularJS Cordova/Ionic 应用程序如何有效地使用从服务器加载的 index.html 逻辑?

否则,有人可以显示/解释我是否/如何使用来自服务器的 js-files.zip,并解压缩并在 index.html 中使用?

详情/注意事项:

(*1) 未捕获的错误:[$injector:modulerr] 无法实例化模块 myapp 由于: 错误:[$injector:nomod] 模块“myapp”不可用!您要么拼错了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。 http://errors.angularjs.org/1.2.17/$injector/nomod?p0=myapp

【问题讨论】:

    标签: angularjs cordova web-applications ionic-framework


    【解决方案1】:

    有人指出,您可以在某些情况下使用 JavaScript 来解压缩档案,但这并不常见。网络不是这样工作的,Ionic 在浏览器内部运行,因此您应该使用与优化网站相同的流程。

    您可以像任何网站一样构建应用程序。采取以下步骤来创建更优化的应用程序以快速加载。如果您不熟悉构建工具,请查看 http://yeoman.io/,以及此特定的 Ionic 生成器 https://github.com/diegonetto/generator-ionic。

    这里是您可以采取的一些步骤的非常基本的列表,尽管生成器提供了更多选项并且还可以添加其他内容。

    1. 将应用的 JavaScript 合并并最小化为单个文件。
    2. 将应用的 CSS 合并并最小化到一个文件中。
    3. 使用https://www.npmjs.org/package/grunt-angular-templates 之类的工具将您的 Angular 模板压缩到单个 JS 文件中。
    4. 将静态资产部署到服务器。
    5. 链接到 index.html 中的上述资产。

    最终目标是优化资产,这样您就不必加载大量文件,并且每个文件都尽可能压缩。

    【讨论】:

    • 这是不正确的。你当然可以从一个 zip 文件中加载文件,解压它们,然后在你的应用程序中使用它们。 :-D stuk.github.io/jszip/
    • 很公平,看来您在技术上可以做到,但我不会考虑这样做。似乎有很多限制,它增加了处理解压缩的开销,甚至不支持压缩。
    • 呃,zip 文件确实会压缩。而且没有任何理由不能事先缩小。无论如何,您必须确保 Cordova 应用程序使用您的方法缓存文件。 (如果互联网不可用并且它不是仅限互联网的应用程序)
    【解决方案2】:

    如果您想使用 zip 文件路径,并且假设您的用户并不总是连接到互联网,那么最好的方法可能是:

    通过服务器调用检查版本是否为新版本,如果是,则下载 zip 文件,解压缩(可能通过 stuk.github.io/jszip/),然后使用 Cordova 接口将新的 JS 代码写入手机的内存,并通过在加载程序中添加一些脚本标签来运行代码。

    【讨论】:

      猜你喜欢
      • 2015-10-27
      • 2019-04-22
      • 2019-04-19
      • 2018-10-08
      • 2015-01-17
      • 1970-01-01
      • 2016-09-20
      • 2017-07-19
      • 1970-01-01
      相关资源
      最近更新 更多