[
https://issues.apache.org/jira/browse/CB-3029?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13647590#comment-13647590
]
Andrew Grieve edited comment on CB-3029 at 5/2/13 2:55 PM:
-----------------------------------------------------------
Yep, this was certainly a regression from 2.6.
We added in the following code:
{code}
// Try to XHR the cordova_plugins.json file asynchronously.
try { // we commented we were going to try, so let us actually try and catch
var xhr = new context.XMLHttpRequest();
xhr.onload = function() {
// If the response is a JSON string which composes an array, call
handlePluginsObject.
// If the request fails, or the response is not a JSON array, just
call finishPluginLoading.
var obj = this.responseText && JSON.parse(this.responseText);
if (obj && obj instanceof Array && obj.length > 0) {
handlePluginsObject(obj);
} else {
finishPluginLoading();
}
};
xhr.onerror = function() {
finishPluginLoading();
};
xhr.open('GET', 'cordova_plugins.json', true); // Async
xhr.send();
}
catch(err){
finishPluginLoading();
}
{code}
When loading over HTTP, onload is called with status==400 and responseText with
an error page. JSON.parse then throws and the surrounding try/catch doesn't
apply since it's in a callback.
As a work-around for 2.7, you can delete this entire chunk of code, and replace
it with a call to finishPluginLoading(). The code is used only when using
cordova-cli. Another work-around is to just create an empty file in your www/
called "cordova_plugins.json".
was (Author: agrieve):
Yep, this was certainly a regression from 2.6.
We added in the following code:
// Try to XHR the cordova_plugins.json file asynchronously.
try { // we commented we were going to try, so let us actually try and catch
var xhr = new context.XMLHttpRequest();
xhr.onload = function() {
// If the response is a JSON string which composes an array, call
handlePluginsObject.
// If the request fails, or the response is not a JSON array, just
call finishPluginLoading.
var obj = this.responseText && JSON.parse(this.responseText);
if (obj && obj instanceof Array && obj.length > 0) {
handlePluginsObject(obj);
} else {
finishPluginLoading();
}
};
xhr.onerror = function() {
finishPluginLoading();
};
xhr.open('GET', 'cordova_plugins.json', true); // Async
xhr.send();
}
catch(err){
finishPluginLoading();
}
When loading over HTTP, onload is called with status==400 and responseText with
an error page. JSON.parse then throws and the surrounding try/catch doesn't
apply since it's in a callback.
As a work-around for 2.7, you can delete this entire chunk of code, and replace
it with a call to finishPluginLoading(). The code is used only when using
cordova-cli. Another work-around is to just create an empty file in your www/
called "cordova_plugins.json".
> remote page loading 2.6.0 cordova js file not work
> --------------------------------------------------
>
> Key: CB-3029
> URL: https://issues.apache.org/jira/browse/CB-3029
> Project: Apache Cordova
> Issue Type: Bug
> Components: BlackBerry, iOS
> Affects Versions: 2.6.0
> Environment: tested on ios including iphone and ipad; on blackberry,
> reported this error: TypeError:'undefined'is not an object
> Reporter: Andy Downton
> Assignee: Andrew Grieve
> Fix For: 2.7.0
>
>
> My app loads remote page containing cordova js file; it works fine with 2.5.0
> and previous version, however, after upgrading cordova js file to 2.6.0, all
> app functions broken, no deviceready fired at all and other app functions
> stop working. this bug affects only remote page loading cordova js file on
> ios and blackberry, local page works fine. I only tested on iphone, ipad and
> blackberry, not sure if this issue affects other OSs.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira