{"version":3,"file":"bytedance-jsbridge.umd.js","sources":["../node_modules/tslib/tslib.es6.js","../node_modules/@bridge/base/lib/base-jsbridge.es.js","../src/util.ts","../src/detector.ts","../src/toutiao.ts","../src/bytedance.ts","../node_modules/es6-object-assign/index.js","../src/polyfill.ts","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/*!\n* @bridge/base v2.1.1\n* (c) 2022 \n*/\nvar version = \"2.1.1\";\n\n/**\r\n * 类型:函数调用错误码\r\n */\r\nvar ErrorCode;\r\n(function (ErrorCode) {\r\n ErrorCode[ErrorCode[\"Failure\"] = 0] = \"Failure\";\r\n ErrorCode[ErrorCode[\"Success\"] = 1] = \"Success\";\r\n ErrorCode[ErrorCode[\"Unauthorized\"] = -1] = \"Unauthorized\";\r\n ErrorCode[ErrorCode[\"NotExist\"] = -2] = \"NotExist\"; // 接口不存在\r\n})(ErrorCode || (ErrorCode = {}));\r\n/**\r\n * 发送方法调用消息的iframe id\r\n */\r\nvar DISPATCH_MESSAGE_IFRAME_ID = '__JSBridgeIframe__';\r\n/**\r\n * 发送方法调用队列的iframe id\r\n */\r\nvar SET_RESULT_IFRAME_ID = '__JSBridgeIframe_SetResult__';\r\n/**\r\n * 回调函数ID计数起点\r\n * PIA Wroker计数起点差异化,背景 https://bytedance.feishu.cn/docx/doxcnGvSgtSzoOvbiPS1wdZRKNg\r\n */\r\nvar CALLBACK_ID_START = typeof __PIA_WORKER__ === \"undefined\" ? 1023 : 1023e5;\r\n/**\r\n * 默认的JSSDK版本号\r\n */\r\nvar DEFAULT_VERSION = version;\r\n/**\r\n * iframe调用的默认scheme\r\n */\r\nvar DEFAULT_SCHEME = 'nativeapp://';\r\n/**\r\n * iframe调用的默认消息发送路径\r\n */\r\nvar DEFAULT_DISPATCH_MESSAGE_PATH = 'dispatch_message/';\r\n/**\r\n * iframe调用的默认结果发送路径\r\n */\r\nvar DEFAULT_SET_RESULT_PATH = 'private/setresult/SCENE_FETCHQUEUE';\r\nvar JSBridge = /** @class */ (function () {\r\n function JSBridge(options) {\r\n this.version = options.version || DEFAULT_VERSION;\r\n this.nativeMethodInvoker = options.nativeMethodInvoker;\r\n this.nativeEventListener = options.nativeEventListener;\r\n this.scheme = options.scheme || DEFAULT_SCHEME;\r\n this.dispatchMessagePath = options.dispatchMessagePath || DEFAULT_DISPATCH_MESSAGE_PATH;\r\n this.setResultPath = options.setResultPath || DEFAULT_SET_RESULT_PATH;\r\n this.dispatchMessageIFrameId = options.dispatchMessageIFrameId || DISPATCH_MESSAGE_IFRAME_ID;\r\n this.setResultIFrameId = options.setResultIFrameId || SET_RESULT_IFRAME_ID;\r\n this.listenNativeEvent = options.listenNativeEvent === true ? true : false;\r\n this.callbackId = CALLBACK_ID_START;\r\n this.callbackMap = {};\r\n this.eventMap = {};\r\n this.javascriptMessageQueue = [];\r\n this.callbackProcessor = options.callbackProcessor;\r\n }\r\n /**\r\n * 设置业务应用ID\r\n * @param appID\r\n * @returns\r\n */\r\n JSBridge.prototype.setAppID = function (appID) {\r\n this.appID = appID;\r\n return;\r\n };\r\n /**\r\n * 调用客户端方法\r\n *\r\n * @param func - 函数名称\r\n * @param params - 参数\r\n * @param callback - 回调函数\r\n * @param sdkVersion - JSSDK版本号\r\n */\r\n JSBridge.prototype.call = function (func, params, callback, options) {\r\n if (options === void 0) { options = this.version; }\r\n var sdkVersion = this.version;\r\n var namespace;\r\n var appID = this.appID;\r\n if (!func || typeof func !== 'string') {\r\n return;\r\n }\r\n if (typeof params !== 'object') {\r\n params = {};\r\n }\r\n if (typeof options === 'string') {\r\n sdkVersion = options || this.version;\r\n }\r\n else if (typeof options === 'object') {\r\n namespace = options.namespace;\r\n sdkVersion = options.sdkVersion || this.version;\r\n appID = options.appID || this.appID;\r\n }\r\n var message = {\r\n func: func,\r\n params: params,\r\n // @ts-ignore\r\n JSSDK: sdkVersion,\r\n __msg_type: 'call',\r\n namespace: namespace,\r\n appID: appID\r\n };\r\n if (typeof callback === 'function' || callback === undefined) {\r\n var callbackId = this.registerCallback(func, callback);\r\n message.__callback_id = callbackId;\r\n }\r\n if (typeof __PIA_WORKER__ === \"undefined\" && window.parent !== window) {\r\n // 说明sdk是在iframe内部被引用\r\n // 客户端侧可通过这个属性判断是否在iframe内部使用jsb,从而做相应的处理\r\n // 背景见:https://bytedance.feishu.cn/docs/doccnytoP4lXehQWqvQGsQdZMsb\r\n message.__iframe_url = window.location.href;\r\n }\r\n this.sendMessageToNative(message);\r\n };\r\n /**\r\n * 注册事件监听器\r\n *\r\n * @param event - 事件名称\r\n * @param callback - 回调函数\r\n * @return - 回调ID\r\n */\r\n JSBridge.prototype.on = function (event, callback, once) {\r\n if (once === void 0) { once = false; }\r\n if (!event ||\r\n typeof event !== 'string' ||\r\n typeof callback !== 'function') {\r\n return;\r\n }\r\n var callbackId = this.registerCallback(event, callback);\r\n this.eventMap[event] = this.eventMap[event] || {};\r\n this.eventMap[event][callbackId] = {\r\n once: once\r\n };\r\n // 兼容旧版SDK\r\n if (this.listenNativeEvent) {\r\n if (this.nativeEventListener) {\r\n this.nativeEventListener(event);\r\n }\r\n else {\r\n // const eventMessage: JavaScriptMessage = {\r\n // func: event,\r\n // params: {},\r\n // JSSDK: this.version,\r\n // __msg_type: 'event',\r\n // __callback_id: event,\r\n // };\r\n // this.sendMessageToNative(eventMessage);\r\n // 尝试兼容旧版方案\r\n this.call('addEventListener', { name: event }, null, { sdkVersion: 1 });\r\n }\r\n }\r\n return callbackId;\r\n };\r\n /**\r\n * 注册单次事件监听器\r\n *\r\n * @param event - 事件名称\r\n * @param callback - 回调函数\r\n * @return - 回调ID\r\n */\r\n JSBridge.prototype.once = function (event, callback) {\r\n return this.on(event, callback, true);\r\n };\r\n /**\r\n * 注销事件监听器\r\n *\r\n * @param event - 事件名称\r\n * @param callbackId - 回调ID\r\n * @return - 注销结果\r\n */\r\n JSBridge.prototype.off = function (event, callbackId) {\r\n if (!event || typeof event !== 'string') {\r\n return true;\r\n }\r\n var callbackMetaMap = this.eventMap[event];\r\n if (!callbackMetaMap ||\r\n typeof callbackMetaMap !== 'object' ||\r\n !callbackMetaMap.hasOwnProperty(callbackId)) {\r\n return true;\r\n }\r\n this.deregisterCallback(callbackId);\r\n delete callbackMetaMap[callbackId];\r\n return true;\r\n };\r\n /**\r\n * 模拟客户端触发事件\r\n *\r\n * @param event - 事件名称\r\n * @param params - 事件参数\r\n */\r\n JSBridge.prototype.trigger = function (event, params) {\r\n return this.handleMessageFromNative({\r\n __msg_type: 'event',\r\n __params: params,\r\n __event_id: event\r\n });\r\n };\r\n /**\r\n * 处理客户端发送过来的消息\r\n *\r\n * @param message - 客户端消息\r\n */\r\n JSBridge.prototype.handleMessageFromNative = function (message) {\r\n var _this = this;\r\n var data = message;\r\n var callbackId = String(data.__callback_id);\r\n // [DMT + 直播 + 火山] iOS 的 JSB 3.0 比 Android 多了一层 data, 需要判断是否取出 data (XBridge 例外)\r\n // 所有 event 则都需要取出 data: https://bytedance.feishu.cn/docs/doccnznNw1IQCHH2GldPI7L70Oh#vW6TkD\r\n if (this.callbackProcessor && (typeof this.callbackProcessor === 'function')) {\r\n // 这里取调用的 JSB 名称用于判断是否 XBridge\r\n var method = (this.callbackMap && this.callbackMap[callbackId] || {}).method;\r\n this.callbackProcessor(data, method);\r\n }\r\n var params = data.__params;\r\n // 兼容老版本逻辑,默认设置为''(处理undefined的情况)\r\n var event = String(data.__event_id || '');\r\n var messageType = data.__msg_type;\r\n // 某些app事件消息返回的__msg_type也是callback,所以不要依赖__msg_type来判断是什么类型\r\n if (this.callbackMap[callbackId]) {\r\n messageType = 'callback';\r\n }\r\n else if (this.eventMap[callbackId]) {\r\n messageType = 'event';\r\n // 兼容西瓜 只返回 __callback_id\r\n event = event || callbackId;\r\n }\r\n var ret = { __err_code: 'cb404' };\r\n switch (messageType) {\r\n case 'callback':\r\n var callback = (this.callbackMap && this.callbackMap[callbackId] || {}).callback;\r\n if (typeof callback === 'function') {\r\n ret = callback(params);\r\n }\r\n this.deregisterCallback(callbackId);\r\n break;\r\n case 'event':\r\n var callbackMetaMap_1 = this.eventMap[event];\r\n if (callbackMetaMap_1 && typeof callbackMetaMap_1 === 'object') {\r\n Object.keys(callbackMetaMap_1).forEach(function (callbackId) {\r\n var callback = (_this.callbackMap && _this.callbackMap[callbackId] || {}).callback;\r\n var callbackMeta = callbackMetaMap_1[callbackId];\r\n if (typeof callback === 'function') {\r\n ret = callback(params);\r\n }\r\n if (callbackMeta && callbackMeta.once) {\r\n _this.deregisterCallback(callbackId);\r\n delete callbackMetaMap_1[callbackId];\r\n }\r\n });\r\n }\r\n break;\r\n }\r\n /**\r\n * 在某些场景下,客户端根据返回值来判断\r\n * 客户端的消息是否成功发送到H5端\r\n */\r\n return ret;\r\n };\r\n /**\r\n * 拉取JavaScript消息队列\r\n */\r\n JSBridge.prototype.fetchJavaScriptMessageQueue = function () {\r\n var json = JSON.stringify(this.javascriptMessageQueue);\r\n /**\r\n * android 4.4以下版本客户端通过result iframe获取消息队列内容\r\n *\r\n * 为什么base64编码前需要执行`unescape(encodeURIComponent(json))`?\r\n * 详情参考:https://developer.mozilla.org/zh-CN/docs/Web/API/WindowBase64/btoa#Unicode_%E5%AD%97%E7%AC%A6%E4%B8%B2\r\n */\r\n var base64 = btoa(unescape(encodeURIComponent(json)));\r\n if (this.setResultIFrame && this.javascriptMessageQueue.length > 0) {\r\n this.setResultIFrame.src = \"\" + this.scheme + this.setResultPath + \"&\" + base64;\r\n }\r\n // 清空javascript消息队列\r\n this.javascriptMessageQueue.splice(0, this.javascriptMessageQueue.length);\r\n /**\r\n * ios以及android 4.4以上版本客户端\r\n * 直接通过函数返回值获取消息队列内容\r\n */\r\n return json;\r\n };\r\n /**\r\n * 发送消息到客户端\r\n *\r\n * @param message JavaScript端的消息结构\r\n */\r\n JSBridge.prototype.sendMessageToNative = function (message) {\r\n /**\r\n * 在编写注入式调用和iframe式调用的性能对比测试时,需要提供一个机制\r\n * 主动触发iframe式调用,因此这里增加了一个判断条件message.JSSDK,\r\n * 调用方法时sdkVersion传入空字符串即可触发iframe调用。\r\n */\r\n if (String(message.JSSDK) !== \"1\" && this.nativeMethodInvoker) {\r\n var nativeMessageJSON = this.nativeMethodInvoker(message);\r\n /**\r\n * 如果该方法有返回,说明客户端采用了同步调用方式\r\n */\r\n if (nativeMessageJSON) {\r\n var nativeMessage = JSON.parse(nativeMessageJSON);\r\n this.handleMessageFromNative(nativeMessage);\r\n }\r\n }\r\n else {\r\n // 如果没有检测到注入的全局API,则fallback到iframe发起调用的方式\r\n this.javascriptMessageQueue.push(message);\r\n if (!this.dispatchMessageIFrame) {\r\n this.tryCreateIFrames();\r\n }\r\n this.dispatchMessageIFrame.src = \"\" + this.scheme + this.dispatchMessagePath;\r\n }\r\n };\r\n /**\r\n * 注册回调函数\r\n *\r\n * @param method - 调用方法 / 事件\r\n * @param callback - 回调函数\r\n * @return - 回调ID\r\n */\r\n JSBridge.prototype.registerCallback = function (method, callback) {\r\n var callbackId = String(this.callbackId++);\r\n this.callbackMap[callbackId] = {\r\n method: method,\r\n callback: callback,\r\n };\r\n return callbackId;\r\n };\r\n /**\r\n * 注销回调函数\r\n *\r\n * @param callbackId - 回调函数ID\r\n */\r\n JSBridge.prototype.deregisterCallback = function (callbackId) {\r\n delete this.callbackMap[callbackId];\r\n };\r\n /**\r\n * 尝试创建需要用到的两个iframe\r\n */\r\n JSBridge.prototype.tryCreateIFrames = function () {\r\n this.dispatchMessageIFrame = this.createIFrame(this.dispatchMessageIFrameId);\r\n this.setResultIFrame = this.createIFrame(this.setResultIFrameId);\r\n return;\r\n };\r\n /**\r\n * 创建iframe,用于向客户端发送消息\r\n *\r\n * @param id - iframe元素id\r\n * @return - iframe元素\r\n */\r\n JSBridge.prototype.createIFrame = function (id) {\r\n var iframe = document.getElementById(id);\r\n if (!iframe || iframe.tagName !== 'IFRAME') {\r\n iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n iframe.id = id;\r\n document.documentElement.appendChild(iframe);\r\n }\r\n return iframe;\r\n };\r\n return JSBridge;\r\n}());\n\nexport { JSBridge as default };\n//# sourceMappingURL=base-jsbridge.es.js.map\n","// 适配 PIA Worker 运行环境:https://bytedance.feishu.cn/docx/doxcnX3LPI20Wkph7adk35ZPHpe\ndeclare const __PIA_WORKER__;\n\nexport const global = typeof __PIA_WORKER__ !== 'undefined'\n ? new Function('return this')()\n : typeof window !== 'undefined'\n ? (window as any)\n : {}; // 兼容ssr\n\nconst userAgent = (typeof global !== 'undefined' && global.navigator) ? global.navigator.userAgent : ''; // 兼容ssr\n\n// ua 判断是否为头条方案\n// newsarticle:头条\n// videoarticle:西瓜\n// super:皮皮虾 (super_lite和super_pro)\n// lv: 剪映\n// faceu:Faceu\n// ulike | beauty_me_: 轻颜\n// faceu-os:faceu(海外版)\n// ulike-os或beauty_me_oversea_:轻颜海外版\n// retouch:T项目\n// automobile:懂车帝\n\n// 如果是直播环境则判断为不是头条环境\nexport const isToutiaoEnvironment: boolean = (!!userAgent.match(/(newsarticle|videoarticle|lv|faceu|ulike|beauty_me_|faceu-os|ulike-os|beauty_me_oversea_|retouch)\\/([\\d.]+)/i) || /super|automobile/gi.test(userAgent)) && !/webcast/gi.test(userAgent) && !/luckycatversion/gi.test(userAgent);\n\n\n// 处理faceu国内版问题:国内既有拦截也有注入方式,但是拦截方式没有回调\n// 游戏中台webview只使用了2.0的jsb,如果通过函数名判断是否使用1.0,会导致native调js失效\n// 2021/10/26 新增 PIANativeWorker, PIA 只使用注入\nexport const useInjection: boolean = !!userAgent.match(/(faceu)\\/([\\d.]+)/i) || /gsdk/gi.test(userAgent) || /PIANativeWorker/gi.test(userAgent);\n\n// 旧广告webview sdk的实现,必须使用iframe方式且schema为bytedance\n// https://bytedance.feishu.cn/wiki/wikcnG3BE7Wr5MZ4hUFL187M9nd @maintainer:zhangyu.paul@bytedance.com\nexport const isLegacyAdEnvironment: boolean = !!userAgent.match(/ttad\\/0/i)\n\n// 新增 Phoenix TikTokNow Alligator\nexport const isDMT: boolean = !!userAgent.match(/aweme|trill|musical_ly|phoenix_\\d+|TikTokNow_\\d+|alligatortiktok/i)\nexport const isHotsoon: boolean = !!userAgent.match(/live_stream/i)\nexport const isWebcast: boolean = !!userAgent.match(/Webcast/i)\nexport const isPipixia: boolean = !!userAgent.match(/super/i)\nexport const isDoulaike: boolean = !!userAgent.match(/life_service_merchant/i)\n\n// 皮皮虾特殊逻辑,皮皮虾可能使用1.0的协议向客户端发送事件,客户端回调时用的是3.0的对象,🤮\nexport const useOldSchemeAndGlobalVariable: boolean = /super/gi.test(userAgent);\n","import { NativeMethodInvoker, JavaScriptMessage, NativeEventListener, NativeMessage } from '@bridge/base';\nimport { global, isToutiaoEnvironment, isDMT, isHotsoon, isWebcast, useOldSchemeAndGlobalVariable, isPipixia, isDoulaike } from './util';\nimport { version } from '../package.json';\n\n/**\n * 探测客户端注入的调用API\n */\nexport function detectNativeMethodInvoker(): NativeMethodInvoker|undefined {\n let nativeMethodInvoker;\n\n if (global.JS2NativeBridge && global.JS2NativeBridge._invokeMethod) { // 标准实现\n nativeMethodInvoker = (message: JavaScriptMessage) => {\n return global.JS2NativeBridge._invokeMethod(JSON.stringify(message));\n };\n } else if (global.ToutiaoJSBridge && global.ToutiaoJSBridge.invokeMethod) { // 融合前IES的实现\n nativeMethodInvoker = (message: JavaScriptMessage) => {\n return global.ToutiaoJSBridge.invokeMethod(JSON.stringify(message));\n };\n } else if (global.JS2NativeBridge && global.JS2NativeBridge.call) { // 融合前头条的安卓实现\n nativeMethodInvoker = (message: JavaScriptMessage) => {\n return global.JS2NativeBridge.call(message.func, JSON.stringify(message));\n };\n } else if (global.webkit && global.webkit.messageHandlers && global.webkit.messageHandlers.callMethodParams) { // 融合前头条的iOS WkWebview实现\n nativeMethodInvoker = (message: JavaScriptMessage) => {\n global.webkit.messageHandlers.callMethodParams.postMessage(message);\n // iOS 14 postMessage返回的是promise\n return;\n };\n } else if (global.callMethodParams) { // 融合前头条的iOS UIWebview实现\n nativeMethodInvoker = (message: JavaScriptMessage) => {\n return global.callMethodParams(message.func, message);\n };\n }\n\n return nativeMethodInvoker;\n}\n\n/**\n * 探测客户端注入的事件监听器\n */\nexport function detectNativeEventListener(): NativeEventListener|undefined {\n if (!isToutiaoEnvironment) {\n return;\n }\n\n let nativeEventListener;\n if (global.JSBridge && global.JSBridge.on) { // 标准实现\n nativeEventListener = global.JSBridge.on;\n } else if (global.JS2NativeBridge && global.JS2NativeBridge.on) { // 融合前头条的安卓实现\n nativeEventListener = (event: string) => {\n const eventMessage = {\n JSSDK: version,\n __msg_type: 'event',\n __callback_id: event,\n func: event,\n }; \n global.JS2NativeBridge.on(event, JSON.stringify(eventMessage));\n };\n } else if (global.webkit && global.webkit.messageHandlers && global.webkit.messageHandlers.onMethodParams) { // 融合前头条的iOS WkWebview实现 \n nativeEventListener = (event: string) => {\n const eventMessage = {\n JSSDK: version,\n __msg_type: 'event',\n __callback_id: event,\n func: event,\n }; \n global.webkit.messageHandlers.onMethodParams.postMessage(eventMessage);\n };\n } else if (global.onMethodParams) { // 融合前头条的iOS UIWebview实现\n nativeEventListener = (event: string) => {\n const eventMessage = {\n JSSDK: version,\n __msg_type: 'event',\n __callback_id: event,\n func: event,\n };\n return global.onMethodParams(event, eventMessage);\n };\n }\n return nativeEventListener;\n}\n\n/**\n * 探测客户端支持的scheme\n */\nexport function detectScheme(): 'nativeapp://' | 'bytedance://' | 'bds://' {\n if(isPipixia) {\n return 'bds://';\n }\n if(useOldSchemeAndGlobalVariable) {\n return 'bytedance://'\n }\n if (isToutiaoEnvironment) {\n return 'nativeapp://';\n }\n if (global.JSBridge && global.JSBridge._invokeMethod) {\n return 'nativeapp://';\n }\n return 'bytedance://';\n}\n\nexport function callbackProcessor(message: NativeMessage, method?: string) {\n // x-bridge 方法不做预处理\n if (typeof method === 'string' && true === /^(x|tc)\\./.test(method)) {\n return;\n }\n if (isDMT || isHotsoon || isWebcast || isDoulaike) {\n const params = message.__params;\n if (global.JS2NativeBridge && global.JS2NativeBridge._invokeMethod) {\n message.__params = {\n code: params.code,\n ...params.data,\n };\n }\n }\n}\n","import BaseJSBridge from '@bridge/base';\nimport { PublicApi } from './interface';\nimport { version } from '../package.json';\nimport { global } from './util';\nimport { detectNativeEventListener, callbackProcessor } from './detector';\n\n/**\n * 头条旧版本JSBridge实现(只针对头条旧版本App使用)\n */\nexport default class ToutiaoJSBridge extends BaseJSBridge {\n public publicApi: PublicApi;\n\n // 这里需要改写iframe的id\n // 同时使用1.0和2.0时,如果不区分iframe,那么会同步修改同一个iframe的src,webview只会拦截最后修改的src\n constructor() {\n super({\n version,\n scheme: 'bytedance://',\n listenNativeEvent: true,\n dispatchMessageIFrameId: '__JSBridgeIframe_1.0__',\n setResultIFrameId: '__JSBridgeIframe_SetResult_1.0__',\n nativeEventListener: detectNativeEventListener(),\n callbackProcessor,\n });\n\n this.publicApi = {\n call: this.call.bind(this),\n on: this.on.bind(this),\n once: this.once.bind(this),\n off: this.off.bind(this),\n trigger: this.trigger.bind(this),\n setAppID: this.setAppID.bind(this),\n \n _fetchQueue: this.fetchJavaScriptMessageQueue.bind(this),\n _handleMessageFromToutiao: this.handleMessageFromNative.bind(this),\n };\n }\n \n public exposePublicApiToGlobal() {\n global.ToutiaoJSBridge = Object.assign(global.ToutiaoJSBridge || {}, this.publicApi);\n }\n}","import BaseJSBridge, { Callback, CallOptions, NativeMessage } from '@bridge/base';\nimport { PublicApi } from './interface';\nimport { version } from '../package.json';\nimport { isToutiaoEnvironment, useInjection, isLegacyAdEnvironment, useOldSchemeAndGlobalVariable, global } from './util';\nimport { detectNativeMethodInvoker, detectNativeEventListener, detectScheme, callbackProcessor } from './detector';\nimport ToutiaoJSBridge from './toutiao';\n\ninterface OnOptions {\n useLegacy?: boolean;\n}\n\n/**\n * 融合后的JSBridge(IES所有版本App可用,头条新版App可用)\n */\nexport default class BytedanceJSBridge extends BaseJSBridge {\n public publicApi: PublicApi;\n public toutiaoLegacyJSB: ToutiaoJSBridge;\n\n constructor(toutiaoJSBridge?: ToutiaoJSBridge) {\n super({\n version,\n nativeMethodInvoker: detectNativeMethodInvoker(),\n nativeEventListener: detectNativeEventListener(),\n scheme: detectScheme(),\n listenNativeEvent: isToutiaoEnvironment,\n callbackProcessor,\n });\n\n this.toutiaoLegacyJSB = toutiaoJSBridge;\n this.publicApi = {\n call: this.call.bind(this),\n on: this.on.bind(this),\n once: this.once.bind(this),\n off: this.off.bind(this),\n trigger: this.trigger.bind(this),\n setAppID: this.setAppID.bind(this),\n \n _fetchQueue: this.fetchJavaScriptMessageQueue.bind(this),\n _handleMessageFromApp: this.handleMessageFromNative.bind(this),\n _handleMessageFromToutiao: this.handleMessageFromNative.bind(this),\n };\n }\n\n /**\n * 调用客户端方法\n *\n * @param func - 函数名称\n * @param params - 参数\n * @param callback - 回调函数\n * @param options - JSSDK版本号 或者 option配置: {sdkVersion,namespace}\n */\n public call(\n func: string,\n params: object,\n callback: Callback,\n options: CallOptions | string = version\n ) {\n if (this.isLegacyCall(func)) {\n this.toutiaoLegacyJSB.call(func, params, callback, options);\n } else {\n super.call(func, params, callback, options);\n }\n }\n\n /**\n * 注册事件监听器\n *\n * @param event - 事件名称\n * @param callback - 回调函数\n * @param options - 调用配置\n * @return - 回调ID\n */\n public on(\n event: string,\n callback: Callback,\n once: boolean = false,\n options?: OnOptions, // 暂时用于控制协议版本\n ): string {\n const { useLegacy } = options || {}\n // 提供调用选项,如果指定使用3.0协议则无视事件名判断\n if (useLegacy || this.isLegacyCall(event)) {\n return this.toutiaoLegacyJSB.on(event, callback, once);\n } else {\n return super.on(event, callback, once);\n }\n }\n \n /**\n * 注册单次事件监听器\n *\n * @param event - 事件名称\n * @param callback - 回调函数\n * @return - 回调ID\n */\n public once(event: string, callback: Callback): string {\n if (this.isLegacyCall(event)) {\n return this.toutiaoLegacyJSB.once(event, callback);\n } else {\n return super.once(event, callback);\n }\n }\n\n /**\n * 注销事件监听器\n *\n * @param event - 事件名称\n * @param callbackId - 回调ID\n * @return - 注销结果\n */\n public off(event: string, callbackId: string): boolean {\n if (this.isLegacyCall(event)) {\n return this.toutiaoLegacyJSB.off(event, callbackId);\n } else {\n return super.off(event, callbackId);\n }\n }\n \n /**\n * 模拟客户端触发事件\n *\n * @param event - 事件名称\n * @param params - 事件参数\n */\n public trigger(event: string, params: object): boolean {\n if (this.isLegacyCall(event)) {\n return this.toutiaoLegacyJSB.trigger(event, params);\n } else {\n return super.trigger(event, params);\n }\n }\n\n /**\n * 设置业务应用 ID\n * @param appID \n */\n public setAppID(appID: number): void {\n if (this.toutiaoLegacyJSB) {\n this.toutiaoLegacyJSB.setAppID(appID);\n }\n super.setAppID(appID);\n }\n \n public exposePublicApiToGlobal() { \n global.JSBridge = Object.assign(global.JSBridge || {}, this.publicApi);\n // 兼容那些非头条环境但是使用过2.0协议的app\n // 皮皮虾Android会先后用2.0 1.0的版本拦截schema, 此处不注入Native2JSBridge让2.0的拦截失效\n // 详见 https://bytedance.feishu.cn/docs/doccnOAscnazxsYPyZRlMz5ptOb#\n if(!global.__DISABLE_JSB_PROTOCAL2__) {\n global.Native2JSBridge = Object.assign(global.Native2JSBridge || {}, this.publicApi);\n }\n if (useOldSchemeAndGlobalVariable) {\n global.ToutiaoJSBridge = Object.assign(global.ToutiaoJSBridge || {}, this.publicApi);\n } else if ((isToutiaoEnvironment || isLegacyAdEnvironment) && this.toutiaoLegacyJSB) {\n this.toutiaoLegacyJSB.exposePublicApiToGlobal();\n } else {\n global.ToutiaoJSBridge = Object.assign(global.ToutiaoJSBridge || {}, this.publicApi);\n }\n // 支持在iframe中调用,注意:需要放在freeze之前,否则freeze失败就无法执行到\n if (global.parent !== global && global.addEventListener){\n global.addEventListener(\"message\", (event: { data: NativeMessage; }) => {\n if(event && event.data && event.data.__callback_id) {\n this.handleMessageFromNative(event.data)\n }\n }, false);\n }\n // 将window下的ToutiaoJSBridge和JSBridge设置成不可写,避免被其他注入的jsb覆盖\n Object.defineProperties(global, {\n 'JSBridge': {\n writable: false\n },\n 'Native2JSBridge': {\n writable: false\n },\n 'ToutiaoJSBridge': {\n writable: false\n }\n });\n\n // 冻结全局JSB对象,防止被改写\n Object.freeze(global.JSBridge);\n Object.freeze(global.Native2JSBridge);\n Object.freeze(global.ToutiaoJSBridge);\n }\n\n /**\n * 判断是否是头条旧实现,头条新实现方法名都带\".\"\n *\n * @param func - 函数名称\n */\n private isLegacyCall(func: string) {\n if (!func || typeof func !== 'string' || !this.toutiaoLegacyJSB) {\n return false;\n }\n if (isLegacyAdEnvironment) {\n return true\n }\n if (useInjection || useOldSchemeAndGlobalVariable) {\n return false\n }\n return isToutiaoEnvironment && func.indexOf('.') < 0\n }\n}","/**\n * Code refactored from Mozilla Developer Network:\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n */\n\n'use strict';\n\nfunction assign(target, firstSource) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert first argument to object');\n }\n\n var to = Object(target);\n for (var i = 1; i < arguments.length; i++) {\n var nextSource = arguments[i];\n if (nextSource === undefined || nextSource === null) {\n continue;\n }\n\n var keysArray = Object.keys(Object(nextSource));\n for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n var nextKey = keysArray[nextIndex];\n var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n return to;\n}\n\nfunction polyfill() {\n if (!Object.assign) {\n Object.defineProperty(Object, 'assign', {\n enumerable: false,\n configurable: true,\n writable: true,\n value: assign\n });\n }\n}\n\nmodule.exports = {\n assign: assign,\n polyfill: polyfill\n};\n","/**\n * Eden目前不支持自动添加polyfill, 暂时手动引用\n */\n\nimport ObjectAssign from 'es6-object-assign';\n\nObjectAssign.polyfill();\n","import ToutiaoJSBridge from './toutiao';\nimport BytedanceJSBridge from './bytedance';\nimport './polyfill';\n\nconst toutiaoJSBridge = new ToutiaoJSBridge();\nconst bytedanceJSBridge = new BytedanceJSBridge(toutiaoJSBridge);\n\ntry {\n // break change notice\n console.warn(\"[Bridge] This version has Break Change, please pay attention to compatibility, more details: https://zjsms.com/JXKorkC/\");\n // 暴露公共Api到全局环境\n bytedanceJSBridge.exposePublicApiToGlobal();\n} catch (error) {\n console.warn(error.message);\n}\n\n// ! 不能export { bytedance } !\n// 在umd格式下是 JSBridge.bytedance = bytedanceJSBridge.publicApi,但是JSBridge已经被freeze了,所以会报错\n// export { bytedance }\n\nconst bytedance = bytedanceJSBridge.publicApi;\n\nexport default bytedance;"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","ErrorCode","__assign","assign","t","s","i","n","arguments","length","call","apply","CALLBACK_ID_START","__PIA_WORKER__","JSBridge","options","version","nativeMethodInvoker","nativeEventListener","scheme","dispatchMessagePath","setResultPath","dispatchMessageIFrameId","setResultIFrameId","listenNativeEvent","callbackId","callbackMap","eventMap","javascriptMessageQueue","callbackProcessor","setAppID","appID","func","params","callback","namespace","sdkVersion","message","JSSDK","__msg_type","undefined","registerCallback","__callback_id","window","parent","__iframe_url","location","href","sendMessageToNative","on","event","once","name","off","callbackMetaMap","deregisterCallback","trigger","handleMessageFromNative","__params","__event_id","_this","data","String","method","messageType","ret","__err_code","callbackMetaMap_1","keys","forEach","callbackMeta","fetchJavaScriptMessageQueue","json","JSON","stringify","base64","btoa","unescape","encodeURIComponent","setResultIFrame","src","splice","nativeMessageJSON","nativeMessage","parse","push","dispatchMessageIFrame","tryCreateIFrames","createIFrame","id","iframe","document","getElementById","tagName","createElement","style","display","documentElement","appendChild","global","Function","userAgent","navigator","isToutiaoEnvironment","match","test","useInjection","isLegacyAdEnvironment","isDMT","isHotsoon","isWebcast","isPipixia","isDoulaike","useOldSchemeAndGlobalVariable","detectNativeEventListener","JS2NativeBridge","eventMessage","webkit","messageHandlers","onMethodParams","postMessage","_invokeMethod","code","ToutiaoJSBridge","_super","publicApi","bind","_fetchQueue","_handleMessageFromToutiao","exposePublicApiToGlobal","BaseJSBridge","BytedanceJSBridge","toutiaoJSBridge","invokeMethod","callMethodParams","toutiaoLegacyJSB","_handleMessageFromApp","isLegacyCall","__DISABLE_JSB_PROTOCAL2__","Native2JSBridge","addEventListener","defineProperties","writable","freeze","indexOf","target","firstSource","TypeError","to","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","polyfill","defineProperty","configurable","value","bytedanceJSBridge","console","warn","error","bytedance"],"mappings":"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"}