uni-app
uni-app copied to clipboard
快手小程序事件报错n.forEach is not a function
小程序编译后的JS vender.js rget,e.detail)),e}(e);var r=(e.currentTarget||e.target).dataset;if(!r)return console.warn("事件信息不存在");var n=r.eventOpts||r["event-opts"];if(!n)return console.warn("事件信息不存在");var i=e.type,o=[];return n.forEach((function(r){var n=r[0],a=r[1],c="^"===n.charAt(0);n=c?n.slice(1):n;var u="~"===n.charAt(0);n=u?n.slice(1):n,a&&function(e,t){return e===t||"regionchange"===t&&("begin"===e||"end"===e)}
未混淆的代码 vender.js `function handleEvent(event) { var _this3 = this; event = wrapper$1(event);
// [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]] var dataset = (event.currentTarget || event.target).dataset; if (!dataset) { return console.warn('事件信息不存在'); } var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰 if (!eventOpts) { return console.warn('事件信息不存在'); }
// [['handle',[1,2,a]],['handle1',[1,2,a]]] var eventType = event.type; var ret = []; eventOpts.forEach(function (eventOpt) { var type = eventOpt[0]; var eventsArray = eventOpt[1]; var isCustom = type.charAt(0) === CUSTOM; type = isCustom ? type.slice(1) : type; var isOnce = type.charAt(0) === ONCE; type = isOnce ? type.slice(1) : type; if (eventsArray && isMatchEventType(eventType, type)) { eventsArray.forEach(function (eventArray) { var methodName = eventArray[0]; if (methodName) { var handlerCtx = _this3.$vm; if (handlerCtx.$options.generic) { // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots handlerCtx = getContextVm(handlerCtx) || handlerCtx; } if (methodName === '$emit') { handlerCtx.$emit.apply(handlerCtx, processEventArgs(_this3.$vm, event, eventArray[1], eventArray[2], isCustom, methodName)); return; } var handler = handlerCtx[methodName]; if (!isFn(handler)) { var _type = _this3.$vm.mpType === 'page' ? 'Page' : 'Component'; var path = _this3.route || _this3.is; throw new Error("".concat(_type, " "").concat(path, "" does not have a method "").concat(methodName, """)); } if (isOnce) { if (handler.once) { return; } handler.once = true; } var params = processEventArgs(_this3.$vm, event, eventArray[1], eventArray[2], isCustom, methodName); params = Array.isArray(params) ? params : []; // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据 if (/=\s*\S+.eventParams\s*||\s*\S+[['"]event-params['"]]/.test(handler.toString())) { // eslint-disable-next-line no-sparse-arrays params = params.concat([,,,,,,,,,, event]); } ret.push(handler.apply(handlerCtx, params)); } }); } }); if (eventType === 'input' && ret.length === 1 && typeof ret[0] !== 'undefined') { return ret[0]; } }` eventOpts 存在但不为数组,核心库里需要兼容一下eventOpts不为数组,每次编译后处理很麻烦