# Wiki源代码使用 JavaScript 创建给 APP 外壳回调的临时函数

由 Qiongpan Ke 于 2024-07-03 最后修改
导出
Office格式
以PDF格式导出 以ODT格式导出 以RTF格式导出
其他格式

选择要导出的页面：

选择所有/ 无

Legend:
  已创建页面
  修改后的扩展页
  Clean Extension Page

以HTML格式导出

显示最后作者

author | version | line-number | content
--- | --- | --- | ---
|  | 1 | {{code language="js"}}
|  | 2 | /**
|  | 3 | * 创建临时回调函数，主要用于提供给 APP 外壳，在需要时回调 WebView 中的 JavaScript 函数。
|  | 4 | *
|  | 5 | * @param name 临时回调函数的名称前缀。
|  | 6 | * @param callback 回调函数，入参可根据需要自由定义。
|  | 7 | * @param options 附加参数，在回调函数中可通过 this 访问这些附加参数。
|  | 8 | * 另外，预定义 timeoutInterval 参数用于设置临时回调函数的超时时间间隔，
|  | 9 | * 超时后会回调 timeoutCallback 参数指向的函数，默认超时时间为 5 分钟。
|  | 10 | * @return 返回临时回调函数的完整调用名称，可与入参拼装到一起，通过类似 eval 的方式进行调用。
|  | 11 | */
|  | 12 | var createTemporaryCallback = function(name, callback, options) {
|  | 13 | const attribs = options || {};
|  | 14 | const funName = name + '_' + Date.now() + '_' + Math.floor(Math.random() * 1000000);
|  | 15 | const setupFn = function(obj) { window[funName] = obj; return 'window.' + funName; }
|  | 16 | const clearFn = function() { delete window[funName]; };
|  | 17 | const timerId = setTimeout(function() { clearFn(); attribs.timeoutCallback && attribs.timeoutCallback(); }, attribs.timeoutInterval || 5 * 60 * 1000);
|  | 18 | const funBody = function() { clearTimeout(timerId); clearFn(); delete attribs.timeoutCallback; callback.apply(this, arguments); };
|  | 19 | const tempObj = { name: funName, callback: funBody };
|  | 20 | Object.assign(funBody, callback);
|  | 21 | Object.assign(tempObj, attribs);
|  | 22 | return setupFn(tempObj) + '.callback';
|  | 23 | };
|  | 24 |
|  | 25 | var temporaryCallbackName = createTemporaryCallback('demoFn', function(success, message, data) {
|  | 26 | if (+success) {
|  | 27 | this.resolve(data);
|  | 28 | }
|  | 29 | }, {
|  | 30 | resolve: function(data) {
|  | 31 | console.log('data=' + data);
|  | 32 | },
|  | 33 | timeoutInterval: 5000,
|  | 34 | timeoutCallback: function() {
|  | 35 | console.log('Timeout callback!!');
|  | 36 | }
|  | 37 | });
|  | 38 |
|  | 39 | var callbackStatement = temporaryCallbackName + "('1', '成功', 'Hello World!!');"
|  | 40 | eval('setTimeout(function() { ' + callbackStatement + ' }, 4999);'); // 未超时，正常回调
|  | 41 | eval('setTimeout(function() { ' + callbackStatement + ' }, 5000);'); // 已超时，回调失败
|  | 42 | {{/code}}

# 同级页面

# 博客类别

- https://www.keqiongpan.cn:80/bin/view/Blog/">全部

- News (0)
- Other (0)
- Personal (0)

# 当前已创建的

- 线性布局组件与占位组件
- React
- CSS Flexbox Cheat Sheet
- CSS界面布局控制属性概述
- CSS

粤公网安备 44011802000481号 粤ICP备2020117634号
版权所有，如发现盗用模仿必追诉法律责任！
CopyRight © 2020-2023 keqiongpan.cn. All Right Reserved.