我们有一个单一页面混合应用开发与cordova 3.4.0和angularJS通过Hybrid app plugin(CPT2.0)在visual 2013年。
这个应用程序有一些嵌入式资源(jquery、angularjs、引导程序和少量的丙型代码),还需要一些其他远程资源(angularjs模块、css等)。远程资源存储在CDN中,并通过asp.net捆绑绑定。
之所以做出这一选择,是因为前提条件是对应用程序进行快速更新,而不是延迟存储验证和发布,而且我们有一个与此应用共享角度模板和资源的响应性网站。
app主页有一个<head>部分,它引用嵌入式脚本,对于我们在dom中编写的远程脚本,我们使用了一些脚本标记(使用.append),因为远程资源的基本url是存储在配置文件中的一个参数。
在远程脚本加载之后,应用程序必须等待cordova事件deviceready事件,当该事件被触发时,应用程序应该最终引导主角度应用程序。
这是我们正在做的事情的基本样本:
<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和安卓)。
发布于 2014-09-11 18:19:37
我手头没有任何示例代码,但在这种情况下,我要做的是:
此外,请注意,苹果不赞成这种动态加载应用程序代码。如果他们在评审期间发现了它,他们可能会拒绝它。
编辑:
我只是重新阅读您的代码,并意识到您正在添加您的脚本元素到头部,然后立即初始化引导程序。
脚本的加载是异步的,所以您需要等待它们完成。您可能希望使用像require.js或curl.js这样的脚本加载器来加载这些远程脚本。它们应该提供一些通知,说明它们已经完全加载。
https://stackoverflow.com/questions/25779744
复制相似问题