首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确加载带有远程脚本的Cordova和Angularjs混合应用程序

如何正确加载带有远程脚本的Cordova和Angularjs混合应用程序
EN

Stack Overflow用户
提问于 2014-09-11 05:31:05
回答 1查看 2.1K关注 0票数 2

我们有一个单一页面混合应用开发与cordova 3.4.0angularJS通过Hybrid app plugin(CPT2.0)在visual 2013年。

这个应用程序有一些嵌入式资源(jquery、angularjs、引导程序和少量的丙型代码),还需要一些其他远程资源(angularjs模块、css等)。远程资源存储在CDN中,并通过asp.net捆绑绑定。

之所以做出这一选择,是因为前提条件是对应用程序进行快速更新,而不是延迟存储验证和发布,而且我们有一个与此应用共享角度模板和资源的响应性网站。

app主页有一个<head>部分,它引用嵌入式脚本,对于我们在dom中编写的远程脚本,我们使用了一些脚本标记(使用.append),因为远程资源的基本url是存储在配置文件中的一个参数。

在远程脚本加载之后,应用程序必须等待cordova事件deviceready事件,当该事件被触发时,应用程序应该最终引导主角度应用程序。

这是我们正在做的事情的基本样本:

代码语言:javascript
复制
<html>
    <head>

        <!-- embedded scripts-->
        <script type="text/javasript" src="scripts/jquery.js" />
        <script type="text/javasript" src="scripts/angular.js" />
        <script type="text/javasript" src="scripts/embeddedScript2.js" />
        <script type="text/javasript" src="cordova.js" />

        <!-- remote scripts-->
        <script type="text/javascript">
            // path to cdn bundle loaded from a xml config
            var serverbundle = 'http://loadedfromconfig.com/cdn/myBundleMobile.js';
            // path to angularjs bundle shared with website and loaded from xml config
            var angularbundle = 'http://loadedfromconfig.com/myBundleMobile.js';
            // simplified append to head of remote scripts with path composition
            $("head").append("'<script type='text/javascript' src='"+serverbundle+"'/>");
            $("head").append("'<script type='text/javascript' src='"+angularbundle+"'/>");

            // cordova events binded onload
            var app = {
                initialize: function(){
                    document.addEventListener("deviceready", onDeviceReady, false);
                },
                onDeviceReady: function(){
                    // manual bootstrapping of angularjs app, when all ready
                    angular.bootstrap(document, ['myApp']);
                }
            };

        </script>
    </head>
    <body onload='javascript: app.initialize()'>

        <!-- HTML and AngularJS directives -->
        <angular-directive />

    </body>
</html>

我的问题是:同步远程资源加载、cordova deviceready和角引导的正确方法是什么?

上面的设计很好用,但有时远程脚本没有加载,或者deviceready在所有模块正确加载之前都会提前启动和引导角度应用程序。

我还试图更好地同步脚本加载和cordova,但没有成功,因为有些设计并不能兼容所有的树目标平台(ios、wp8和安卓)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-11 18:19:37

我手头没有任何示例代码,但在这种情况下,我要做的是:

  • 将所有文件的初始版本与应用程序一起打包。用户可能在应用程序第一次运行时离线,因此无法远程加载脚本。
  • 在应用程序启动时,看看设备是否在线。
  • 如果联机,使用$.ajax从CDN下载新脚本,并使用cordova文件API将它们保存到文件系统中。
  • 通过向指向文件系统的页面注入脚本标记,将下载的脚本添加到文档中。
  • 如果应用程序是脱机的,请使用以前下载的脚本版本。

此外,请注意,苹果不赞成这种动态加载应用程序代码。如果他们在评审期间发现了它,他们可能会拒绝它。

编辑:

我只是重新阅读您的代码,并意识到您正在添加您的脚本元素到头部,然后立即初始化引导程序。

脚本的加载是异步的,所以您需要等待它们完成。您可能希望使用像require.js或curl.js这样的脚本加载器来加载这些远程脚本。它们应该提供一些通知,说明它们已经完全加载。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25779744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档