nativeCallback.js 968 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. var CALLBACK = (function() {
  2. var
  3. /** @type {Object<string, Function>} */
  4. callbacks = {},
  5. /** @type {number} */
  6. currentCallbackId = 0;
  7. /** @type {function(Function, Object=):number} */
  8. function makeCallback(fnc, ctx) {
  9. var cbId = currentCallbackId++;
  10. if (ctx)
  11. fnc.ctx = ctx;
  12. callbacks['' +cbId] = fnc;
  13. return cbId;
  14. }
  15. function triggerCallback() {
  16. var id = '' +Array.prototype.shift.call(arguments);
  17. if (callbacks[id]) {
  18. callbacks[id].apply(callbacks[id].ctx, arguments);
  19. delete callbacks[id];
  20. }
  21. }
  22. return {
  23. /** @type {function(Function, Object=):number} */
  24. makeCallback: makeCallback,
  25. onCallbackResponse: triggerCallback
  26. };
  27. })();
  28. window["__CALLBACK"] = { "onResult": CALLBACK.onCallbackResponse };
  29. /** @return {boolean} */
  30. function isNative() {
  31. return !!("__native" in window);
  32. }