updated cordova.js to include proper plugin loading

This commit is contained in:
Steven Gill 2013-05-17 10:51:52 -07:00
parent cd9fb9b709
commit 78dd084303

View File

@ -1,5 +1,5 @@
// Platform: android // Platform: android
// 2.7.0rc1-53-gbb10068 // 2.7.0rc1-72-g6ec24b1
/* /*
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
@ -19,7 +19,7 @@
under the License. under the License.
*/ */
;(function() { ;(function() {
var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-53-gbb10068'; var CORDOVA_JS_BUILD_LABEL = '2.7.0rc1-72-g6ec24b1';
// file: lib/scripts/require.js // file: lib/scripts/require.js
var require, var require,
@ -6303,7 +6303,7 @@ require('cordova/channel').onNativeReady.fire();
// See plugman's plugin_loader.js for the details of this object. // See plugman's plugin_loader.js for the details of this object.
// This function is only called if the really is a plugins array that isn't empty. // This function is only called if the really is a plugins array that isn't empty.
// Otherwise the XHR response handler will just call finishPluginLoading(). // Otherwise the XHR response handler will just call finishPluginLoading().
function handlePluginsObject(modules) { function handlePluginsObject(modules, path) {
// First create the callback for when all plugins are loaded. // First create the callback for when all plugins are loaded.
var mapper = context.cordova.require('cordova/modulemapper'); var mapper = context.cordova.require('cordova/modulemapper');
onScriptLoadingComplete = function() { onScriptLoadingComplete = function() {
@ -6337,11 +6337,21 @@ require('cordova/channel').onNativeReady.fire();
// Now inject the scripts. // Now inject the scripts.
for (var i = 0; i < modules.length; i++) { for (var i = 0; i < modules.length; i++) {
injectScript(modules[i].file); injectScript(path + modules[i].file);
} }
} }
// Find the root of the app
var path = '';
var scripts = document.getElementsByTagName('script');
var term = 'cordova.js';
for (var n = scripts.length-1; n>-1; n--) {
var src = scripts[n].src;
if (src.indexOf(term) == (src.length - term.length)) {
path = src.substring(0, src.length - term.length);
break;
}
}
// Try to XHR the cordova_plugins.json file asynchronously. // Try to XHR the cordova_plugins.json file asynchronously.
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.onload = function() { xhr.onload = function() {
@ -6354,7 +6364,7 @@ require('cordova/channel').onNativeReady.fire();
// obj will be undefined. // obj will be undefined.
} }
if (Array.isArray(obj) && obj.length > 0) { if (Array.isArray(obj) && obj.length > 0) {
handlePluginsObject(obj); handlePluginsObject(obj, path);
} else { } else {
finishPluginLoading(); finishPluginLoading();
} }
@ -6362,8 +6372,9 @@ require('cordova/channel').onNativeReady.fire();
xhr.onerror = function() { xhr.onerror = function() {
finishPluginLoading(); finishPluginLoading();
}; };
var plugins_json = path + 'cordova_plugins.json';
try { // we commented we were going to try, so let us actually try and catch try { // we commented we were going to try, so let us actually try and catch
xhr.open('GET', 'cordova_plugins.json', true); // Async xhr.open('GET', plugins_json, true); // Async
xhr.send(); xhr.send();
} catch(err){ } catch(err){
finishPluginLoading(); finishPluginLoading();