"plugins not defined" in PhoneGap application

I'm currently trying to use the PhoneGap LocalNotification Plugin plugin using Android 4.1 along with Cordova 2.0.0 and Sketcha (UI Library).

UPDATE # 2 20/9/12: I used the Bozzi code with some fixes:

  • Added}) to the end of localnotification.js (syntax error).
  • changed cordova.define("cordova/plugin/LocalNotification", function(require, exports, module) to: cordova.define("cordova/plugin/LocalNotification", function(require, exports, module) so the module name will correspond to this function (before the module was not found):

    window.plugins.LocalNotification = cordova.require ("Cordova / plugin / LocalNotification");

  • change this:

    if (! window.plugins) {window.plugins = {}; } else if (! window.plugins.LocalNotification) {window.plugins.LocalNotification = cordova.require ("cordova / plugin / LocalNotification"); }

:

 if (!window.plugins) { window.plugins = {}; } if (!window.plugins.LocalNotification) { window.plugins.LocalNotification = cordova.require("cordova/plugin/LocalNotification"); } 

before this change, if window.plugins is not found, it will be created, but window.plugins.LocalNotification will not.

After all these corrections, I get this error:

 > 09-20 01:22:27.355: D/CordovaLog(8297): > file:///android_asset/www/index.html: Line 21 : PAPA AMERICANO ready > 09-20 01:22:27.360: I/Web Console(8297): PAPA AMERICANO ready at > file:///android_asset/www/index.html:21 09-20 01:22:27.370: > D/CordovaLog(8297): Uncaught TypeError: Cannot call method 'add' of > undefined 09-20 01:22:27.375: D/CordovaLog(8297): > file:///android_asset/www/index.html: Line 35 : Uncaught TypeError: > Cannot call method 'add' of undefined 09-20 01:22:27.375: E/Web > Console(8297): Uncaught TypeError: Cannot call method 'add' of > undefined at file:///android_asset/www/index.html:35 09-20 > 01:22:29.185: D/DroidGap(8297): onMessage(spinner,stop) 09-20 > 01:22:30.255: E/SKIA(8297): FimgApiStretch:stretch failed 09-20 > 01:22:41.755: E/SKIA(8297): FimgApiStretch:stretch failed 09-20 > 01:22:52.565: D/CordovaWebView(8297): >>> loadUrlNow() 09-20 > 01:22:52.565: D/webkit(8297): Firewall not null 09-20 01:22:52.565: > D/webkit(8297): euler: isUrlBlocked = false 

For some reason, cordova.require("cordova/plugin/LocalNotification") does not set window.plugins.LocalNotification and remains undefined. Here is my updated index.html (Update # 2):

 <!DOCTYPE HTML> <html manifest="" lang="en-US"> <head> <meta charset="UTF-8"> <title>AndroidSencha</title> <script id="microloader" type="text/javascript" src="cordova-2.0.0.js"></script> <script id="microloader" type="text/javascript" src="LocalNotification.js"></script> <script id="microloader" type="text/javascript"> function onDeviceReady() { if (!window.plugins) { window.plugins = {}; } else if (!window.plugins.LocalNotification) { window.plugins.LocalNotification = cordova.require("cordova/plugin/LocalNotification"); } } window.document.addEventListener("deviceready", appReady, false); function appReady() { console.log("PAPA AMERICANO ready"); var d = new Date(); d = d.getTime() + 2 * 1000; //60 seconds from now d = new Date(d); if (!window.plugins) { window.plugins = {}; } if (!window.plugins.LocalNotification) { window.plugins.LocalNotification = cordova.require("cordova/plugin/LocalNotification"); } window.plugins.localNotification.add({ date: d, message: 'This is an Android alarm using the statusbar', id: 123 }); } </script> <style type="text/css"> /** * Example of an initial loading indicator. * It is recommended to keep this as minimal as possible to provide instant feedback * while other resources are still being loaded for the first time */ html, body { height: 100%; background-color: #1985D0 } </style> <!-- The line below must be kept intact for Sencha Command to build your application --> <script id="microloader" type="text/javascript" src="sdk/microloader/development.js"></script> <style type="text/css"> .loadingText{ color: white; font-family: "Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif; text-align: center; font-size: 20px; padding-top: 10%; } </style> </head> <body> <div id="appLoadingIndicator"> <div class="loadingText"><div style="margin-bottom: 10px;">Loading, Please wait..</div> <div><img src="resources\images\smileloading.gif"></div></div> </div> </body> </html> 

Here are my localnotificaiton.js after my corrections (Update # 2):

 cordova.define("cordova/plugin/LocalNotification", function(require, exports, module) { var exec = require("cordova/exec"); var LocalNotification = function () {}; LocalNotification.prototype.add = function(options) { var defaults = { date : new Date(), message : '', ticker : '', repeatDaily : false, id : "" }; if (options.date) { options.date = (options.date.getMonth()) + "/" + (options.date.getDate()) + "/" + (options.date.getFullYear()) + "/" + (options.date.getHours()) + "/" + (options.date.getMinutes()); } for ( var key in defaults) { if (typeof options[key] !== "undefined") defaults[key] = options[key]; } cordova.exec(null, null, "LocalNotification", "add", new Array(defaults)); }; LocalNotification.prototype.cancel = function(notificationId) { cordova.exec(null, null, 'LocalNotification', 'cancel', new Array({ id : notificationId })); }; LocalNotification.prototype.cancelAll = function() { cordova.exec(null, null, 'LocalNotification', 'cancelAll', new Array()); }; var LocalNotification = new LocalNotification(); module.exports = LocalNotification }); 

UPDATE # 1: I already added the plugin to the plugins.xml file:

 <plugins> ... <plugin name="LocalNotification" value="com.phonegap.plugin.localnotification.LocalNotification"/> ... </plugins> 

I took the steps mentioned here and replaced the broken java expressions as indicated here .

Unfortunately, when I run the application, I get the following error (both in the emulator and device):

09-16 16: 46: 16.330: E / Web console (27875): Not prepared ReferenceError: plugins are not defined in the file: ///android_asset/www/index.html: 74

This guy is facing the same problem , but I am referencing the java file of the cordova file in my index.html and it still does not work.

Here's what my package explorer looks like (you might find something missing): I'm not sure if I should have plugins.xml or have config.xml and have plugins in it, I have it just in case

Package explorer

Thanks in advance!

+4
source share
4 answers

I changed LocalNotification.js so you can copy the code. It works with cordova 2.0 (verified!)

 cordova.define("cordova/plugin/js/LocalNotification", function(require, exports, module) { var exec = require("cordova/exec"); var LocalNotification = function () {}; LocalNotification.prototype.add = function(options) { var defaults = { date : new Date(), message : '', ticker : '', repeatDaily : false, id : "" }; if (options.date) { options.date = (options.date.getMonth()) + "/" + (options.date.getDate()) + "/" + (options.date.getFullYear()) + "/" + (options.date.getHours()) + "/" + (options.date.getMinutes()); } for ( var key in defaults) { if (typeof options[key] !== "undefined") defaults[key] = options[key]; } cordova.exec(null, null, "LocalNotification", "add", new Array(defaults)); }; LocalNotification.prototype.cancel = function(notificationId) { cordova.exec(null, null, 'LocalNotification', 'cancel', new Array({ id : notificationId })); }; LocalNotification.prototype.cancelAll = function() { cordova.exec(null, null, 'LocalNotification', 'cancelAll', new Array()); }; var LocalNotification = new LocalNotification(); module.exports = LocalNotification; 

});

you can now call notif. with:

  datum = '2012-09-20 15:51:00'; tt1 = datum.split(/[- :]/); dd = new Date(tt1[0], tt1[1]-1, tt1[2], tt1[3], tt1[4], tt1[5]); window.plugins.LocalNotification.add({ date: dd, message: "Some message", ticker : "Some ticker", repeatDaily : false, id: 1234 }); 
+4
source

The .js plugin has not been updated to the 2.0.0 specification. Take a look at one of my latest blog posts on how to write a plugin that complies with the 2.0.0 specification.

http://simonmacdonald.blogspot.ca/2012/08/so-you-wanna-write-phonegap-200-android.html

+4
source

Check out the latest plugin update for cordova 2.2 LocalNotification 2.2

+3
source

use window.plugin, not the plugin, and see what happens.

0
source

Source: https://habr.com/ru/post/1434468/


All Articles