HTML5's canvas + Javascript code not working on iOS

I finished a rudimentary engine for javascript + html5's canvas. Very rudimentary. It works on the browser, but it doesn't work on iOS.

Have I used a function that hasn't been implemented yet on Safari Mobile, or else? :(

http://bluecodestudio.com/kipos/gametest.html

Upvotes: 0

Views: 1772

Answers (1)

user1409066
user1409066

Reputation:

In keyboardJS.init(), you are using the bind() method on your event callbacks.

document.addEventListener("keydown", this.keyIsDown.bind(this));
document.addEventListener("keyup", this.keyIsUp.bind(this));

Safari (including mobile Safari) does not support the bind() method. You need to supply a polyfill:

/**
*    Bind.js
*    Copyright 2010, WebReflection
*    License: http://www.opensource.org/licenses/mit-license.php
*/
if (Function.prototype.bind === null || Function.prototype.bind === undefined) {
    Function.prototype.bind = (function (slice) {
        // (C) WebReflection - Mit Style License
        function bind(context) {
            var self = this; // "trapped" function reference
            // only if there is more than an argument
            // we are interested into more complex operations
            // this will speed up common bind creation
            // avoiding useless slices over arguments
            if (1 < arguments.length) {
                // extra arguments to send by default
                var $arguments = slice.call(arguments, 1);
                return function () {
                    return self.apply(
                        context,
                    // thanks @kangax for this suggestion
                        arguments.length ?
                    // concat arguments with those received
                            $arguments.concat(slice.call(arguments)) :
                    // send just arguments, no concat, no slice
                            $arguments
                    );
                };
            }
            // optimized callback
            return function () {
                // speed up when function is called without arguments
                return arguments.length ? self.apply(context, arguments) : self.call(context);
            };
        }

        // the named function
        return bind;

    } (Array.prototype.slice));
}

Upvotes: 3

Related Questions