Files
2023-08-25 13:31:04 +05:30

70 lines
2.0 KiB
JavaScript

(function () {
if (typeof webkit !== "undefined") {
var channel = webkit.messageHandlers["__SWIFT_BRIDGE_COMMANDER"];
} else if (typeof __SWIFT_BRIDGE_COMMANDER !== "undefined") {
var channel = __SWIFT_BRIDGE_COMMANDER;
} else {
return;
}
var bridge = {};
var stack = [];
var uuid = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
var find = function (id) {
var result;
for (var i = 0; i <= stack.length; i++) {
if (stack[i].id === id) {
result = stack[i];
stack.splice(i, 1);
break;
}
}
return result;
};
Object.defineProperty(bridge, "call", {
"value": function (command, args, onSuccess, onError) {
var message = {
id: uuid(),
command: command,
args: args || "",
response: onSuccess,
error: onError,
promise: promise
};
var promise = new Promise(function (resolve, reject) {
message.response = onSuccess || resolve;
message.error = onError || reject;
});
stack.push(message);
channel.postMessage(JSON.stringify(message));
return promise;
}, "configurable": false
});
Object.defineProperty(bridge, "response", {
"value": function (data) {
var item = find(data.id);
if (item)
item.response(data.payload);
}, "configurable": false
});
Object.defineProperty(bridge, "error", {
"value": function (data) {
var item = find(data.id);
if (item)
item.error(data.payload);
}, "configurable": false
});
Object.defineProperty(window, "BridgeCommander", { "value": bridge, "configurable": false });
} ());