added canvas detection

instead of causing an error, it will silently fail and calls to `knob()` will be ignored.

even if the knob isn't working, its better to silent fail than to generate javascript errors which can prevent execution of other scripts