cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michal Mocny <mmo...@google.com>
Subject cordova-browser plugin polyfills -- which projects already have work in this space?
Date Wed, 05 Nov 2014 15:57:24 GMT
Hi All,

So there's this new cordova-browser platform thing, which is awesome.  I
wanted to get the ball rolling on full plugin support for browser platform
(thanks to Suraj Pindoria + other Adobe folk for the great work so far).

I know a bunch of people/teams have independently solved a lot of the
problems with cordova plugins not running in a browser.  E.g. Some teams
have built client libraries that do feature detection and fallback.  I know
there are some frameworks like angular that have libs for polyfilling
cordova plugins (I think Ionic may do this by default?).  And we saw
Telerik demo cordova plugin polyfills in something that already looked like
cordova-browser at PGDay.

Instead of re-inventing the wheel, please help point out such existing
solutions, and/or reach out to those devs and get them involved in
upstreaming.

Core plugins that still need implementations are:

cordova-plugin-battery-status
cordova-plugin-console
cordova-plugin-contacts
cordova-plugin-dialogs
cordova-plugin-file-transfer
cordova-plugin-file
cordova-plugin-geolocation
cordova-plugin-globalization
cordova-plugin-inappbrowser
cordova-plugin-media
cordova-plugin-media-capture
cordova-plugin-splashscreen
cordova-plugin-vibration
cordova-plugin-statusbar
cordova-plugin-test-framework

cordova-plugins/android-legacy-websql/
cordova-plugins/file-system-roots/
cordova-plugins/keyboard/
cordova-plugins/websql/

The process for implementing a browser polyfill (I'm new to this, may be
missing steps), appears to be just like any other platform whose
implementations are in js (like firefoxos, windows).  Here is the
implementation for device plugin for example:

In plugin.xml:

<!-- browser -->
    <platform name="browser">
        <config-file target="config.xml" parent="/*">
            <feature name="Device">
                <param name="browser-package" value="Device" />
            </feature>
        </config-file>

        <js-module src="src/browser/DeviceProxy.js" name="DeviceProxy">
            <runs />
        </js-module>
    </platform>

The critical bits of src/browser/DeviceProxy.js:

module.exports = {
    getDeviceInfo: function (success, error) {
        setTimeout(function () {
            success({
                cordova: browser.cordovaVersion,
                platform: getPlatform(),
                model: getModel(),
                version: getVersion(),
                uuid: null
            });
        }, 0);
    }
};

require("cordova/exec/proxy").add("Device", module.exports);

That last line is the critical bit, which signals to the bridge to forward
exec calls to these js functions for the "Device" feature.  Proxy handler
is called with (success, fail, args).

-Michal

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message