Phonegap Windows Phone 7 Chargement HTML dynamic et appels entre domaines à l’aide de jQuery

Bon, j’ai beaucoup cherché et j’ai beaucoup de dev Android à l’aide de Phonegap. Quelques questions:

  1. Comment charger un fichier HTML local dans une div de Phonegap à l’aide de jQuery? Quelque chose comme:

    $ (‘# contentDiv’). load (url, fonction (réponse) {});

Je sais que les fichiers Android sont accessibles via android_assets/www/html/file.html . Quel est l’équivalent de cela dans Windows Phone 7 et iOS? J’ai essayé www/html/file.html mais je continue à obtenir 404 non trouvés.

  1. Maintenant, c’est celui qui me rend fou! Poster Ajax de base dans un domaine croisé. Sur le site Web de Phonegap, il est indiqué qu’il n’ya pas de problème d’origine croisée avec Phonegap car il s’agit d’un fichier local, mais chaque fois que je clique sur le gestionnaire d’erreur et que son statut est 0.

Toute aide serait grandement appréciée. Je sais qu’il y a beaucoup de développeurs qui essaient de le faire et que quelqu’un a dû le résoudre.

Bon, à tous ceux qui pourraient tomber sur ça. Voici comment faire fonctionner le chargement de fichiers et les appels ajax.

  1. Assurez-vous de charger tous vos scripts d’initialisation dans le rappel “deviceready” de Cordova phonegap. Si vous ne le faites pas et essayez de passer un appel, par exemple

$ (‘# contentDiv’). load (url, fonction (réponse) {});

Cordova ne connaît pas le mappage d’URL que vous essayez de toucher. Cordova se connecte à l’appel ajax et sélectionne le fichier localement et le transmet à votre rappel. Si Cordova n’est pas initialisé (c’est-à-dire que le périphérique prêt n’est pas encore allumé), le contrôle du navigateur le traite comme un get distant et vous renvoie au problème habituel de Cross-Origin et le rejette. Au moins, c’est ce que je pense qui se passe. Assurez-vous donc que la fonction prêt à fonctionner de votre appareil se déclenche avant de faire des appels ajax pour les fichiers.

  1. $ .support.cors = true; à la rescousse. Ajoutez ceci avant de faire un appel ajax pour une ressource distante. De toute évidence, l’étape 1 devrait être celle qui permet d’initialiser vos scripts locaux.

voici un index.js modifié. Qu’est-ce que cela fait? Eh bien, il vérifie si le navigateur est un appareil mobile et non un ordinateur de bureau et définit également si l’appareil utilise Cordova.

J’utilise require.js pour charger mes modules. le fichier bootstrapper.js est le fichier qui chargera mon écran initial et fera le nécessaire pour obtenir le premier écran dans index.html.

 var app = { // Application Constructor isCordova: false, initialize: function () { app.bindEvents(); }, // Bind Event Listeners // // Bind any events that are required on startup. Common events are: // `load`, `deviceready`, `offline`, and `online`. bindEvents: function () { window.isCordova = app.isCordova; if (app.isMobile()) document.addEventListener('deviceready', app.cordovaReady, false); else app.onReady(); }, cordovaReady: function () { window.isCordova = true; app.onReady(); }, // deviceready Event Handler // // The scope of `this` is the event. In order to call the `receivedEvent` // function, we must explicity call `app.receivedEvent(...);` onReady: function () { app.configureRequire(); app.define3rdPartyModules(); app.loadPlugins(); }, isMobile: function () { var testMobile = function (a) { return /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[aw])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)) } window.isMobile = testMobile(navigator.userAgent || navigator.vendor || window.opera); return window.isMobile; }, configureRequire: function () { requirejs.config({ baseUrl: 'js/app', paths: { 'filePath': '../../html'} }); }, define3rdPartyModules: function () { //this function defines a require js modules and attaches it to the root. define('jquery', [], function () { window.jQuery.support.cors = true; return window.jQuery; }); define('ko', [], function () { return window.ko; }); define('bootstrap', [], function () { return window.bootstrap; }); define('amplify', [], function () { return window.amplify; }); define('infuser', [], function () { return window.infuser; }); define('moment', [], function () { return window.moment; }); define('sammy', [], function () { return window.Sammy; }); define('underscore', [], function () { return window._; }); define('notifier', ['jquery', 'bootstrap'], function () { return window.Notification }); }, loadPlugins: function () { requirejs([], app.boot()); }, boot: function () { require(['bootstrapper'], function (bs) { bs.run(); }); } 

};

Notez que mes bibliothèques de base sont déjà incluses dans le fichier index.html et que je viens de créer un espace de noms global pour toutes mes bibliothèques principales. Reste de mon application des fichiers spécifiques seront chargés sur demande par exigent.

prendre plaisir!

var path = window.location.href; path = path.subssortingng (0, path.indexOf (‘index.html’));