You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Konstantin Preißer (JIRA)" <ji...@apache.org> on 2016/02/12 08:49:18 UTC

[jira] [Created] (CB-10599) Plugin JS objects are undefined when running on iOS with Cordova >= 5.4.0 (e.g. 6.0.0)

Konstantin Preißer created CB-10599:
---------------------------------------

             Summary: Plugin JS objects are undefined when running on iOS with Cordova >= 5.4.0 (e.g. 6.0.0)
                 Key: CB-10599
                 URL: https://issues.apache.org/jira/browse/CB-10599
             Project: Apache Cordova
          Issue Type: Bug
          Components: iOS
         Environment: Windows 10 x64, Visual Studio 2015 Update 1 with Tools for Apache Cordova Update 6
            Reporter: Konstantin Preißer


Hi,
I originally reported this issue here: https://github.com/phonegap/phonegap-plugin-push/issues/605 but found it does not apply to that plugin only, but to all plugins.

I'm using Visual Studio 2015 (Update 1) with Tools for Apache Cordova Update 6 on Windows 10 x64. When I create a Cordova project and use a Cordova CLI version > 5.3.3 (e.g. 6.0.0, 5.4.1 or 5.4.0) and add plugins to it, then JavaScript variables defined by those plugins (e.g. PushNotification) are undefined in the deviceReady event, at least when running on iOS 9.2.1. With Cordova 5.3.3 however, everything works.

I used these steps to reproduce:
1) In Visual Studio 2015 with Cordova Tools Update 6, I created a new Cordova project.
2) Double-clicked on config.xml, then on the Platforms tab I selected "6.0.0" for Cordova CLI version.
3) On the Plugins tab, I added the phonegap-plugin-push plugin using the Git URL (Version 1.5.3): https://github.com/phonegap/phonegap-plugin-push
4) On the Common tab (the first tab), I entered "index.xhtml" as start page.
4) In the projects www folder, I removed the default files, and then placed the following index.xhtml file (the extension ".xhtml" is importand so that the document is treated as XML instead of HTML, which is what I'm using):
{code:xml}
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test Push on iOS</title>
    <!-- Cordova-Script -->
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8" src="scripts/platformOverrides.js"></script>
    <script type="text/javascript" charset="utf-8" src="myscript.js"></script>
</head>
<body>
    <div>Test</div>
    <pre id="result"></pre>
</body>
</html>
{code}
Then added the following myscript.js:
{code:javascript}
(function () {

    // Listen for the device ready event.
    document.addEventListener('deviceready', handleDeviceReady.bind(this), false);

    function logConsole(text) {
        document.getElementById("result").appendChild(document.createTextNode(text + "\r\n"));
    }

    function handleDeviceReady() {
        logConsole("DeviceReady. Trying to register...");
        try {

            // Register for notifications.
            var push = PushNotification.init({
                android: {
                    senderID: "123456",
                    clearNotifications: false
                },
                ios: { alert: true, sound: true },
                windows: {}
            });

            logConsole("Register called.");

            push.on('registration', function (data) {
                logConsole("Registration received: " + data.registrationId);
            });

        } catch (e) {
            logConsole("EXCEPTION: " + e);
        }
    }

})();
{code}

5) Then I built the project for iOS using the instructions at http://taco.visualstudio.com/en-us/docs/run-app-ios/#iOSDevice (in VS toolbar, I selected "Debug", "iOS", "Local Device") and then created the project).

6) When running the app on a iPad with iOS 9.2.1, the document shows "ReferenceError: Can't find variable: PushNotification".

7) Then I opened the config.xml again, and set the Cordova CLI version to "5.3.3". To ensure everything is built again, I deleted the "bin", "bld" and "platform" folders in the project directory. (Or better: Create a completely new project.)

8) After building and running the app again, it works correctly, showing "Registration received" with the registration ID.

Note, that with Cordova CLI 5.4.1 and 5.4.0, the same error (ReferenceError) happens as with 6.0.0. However I want to upgrade to Cordova 6.0.0 so that I can use the newer WKWebView.

Note that this also applies e.g. when using cordova-plugin-globalization: navigator.globalization is undefined with Cordova 5.4.0-6.0.0 on iOS but works with 5.3.3.

Note: When building for Windows 10 (in the config.xml with the Windows Tab, select Target version "Windows 10.0", then in the VS toolbar selecting Debug, Windows-AnyCPU, Local Computer) and running the app locally, there seems to be a similar problem with Cordova 6.0.0: On the first run, the plugin variables are undefined just like on iOS, but on the second run, it works. With Cordova 5.3.3 it works even at the first run.

Thank you



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org