信息发布软件,b2b软件,广告发布软件

 找回密码
 立即注册
搜索
查看: 1|回复: 0
打印 上一主题 下一主题

[宣传软件网站动态] 苹果脚本里H5 里的 window.at.callFun 示例

[复制链接]

1901

主题

1911

帖子

1万

积分

积分
11128

资讯缩略图:

资讯发布日期:2026-04-13

资讯发布简介:苹果脚本里H5 里的 window.at.callFun 示例

资讯关键词:苹果脚本里H5 里的 window.at.callFun 示例

资讯所属分类:IT资讯 SEO资讯 

联系:

① 本信息收集于网络,如有不对的地方欢迎联系我纠正!
② 本信息免费收录,不存在价格的问题!
③ 如果您的网站也想这样出现在这里,请您加好友情链接,我当天会审核通过!

④友情链接关键字:软件网站分类目录 网址:http://www.postbbs.com/

资讯详细描述
苹果脚本里H5 里的 window.at.callFun 示例
  1. // 🍎交流QQ群:711841924(群)
  2. // 🍎交流QQ群:528816639  (苹果内测群)

  3. // 创建 WebView 实例
  4. var web = new WebView();

  5. // 显示 WebView 界面
  6. web.show();

  7. // 加载本地 HTML 文件
  8. var htmlPath = project.getCodePath() + "h5.html";
  9. web.loadFile(htmlPath);

  10. // 打印加载信息
  11. printl("WebView 已创建并加载本地文件:" + htmlPath);

  12. // 导入日志桥接器
  13. Import("LogBridge.js");

  14. // 初始化日志桥接(会阻塞等待 WebView 加载完成)
  15. LogManagerH5.init(web);

  16. // 延迟执行,确保 H5 页面完全加载
  17. _sleep(3000);

  18. // 发送测试日志到 H5 界面
  19. LogManagerH5.success("系统启动成功");
  20. LogManagerH5.info("WebView 已就绪");

  21. // ============================================
  22. // AIWROK 配置管理器H5集成示例
  23. // ============================================
  24. printl("");
  25. printl("====================================");
  26. printl("主脚本.js");
  27. printl("====================================");

  28. // 导入配置管理器H5集成示例
  29. Import("主脚本.js");
复制代码

  1.     //🍎交流 QQ 群:711841924(群一 - 苹果内测群)
  2. //🍎交流 QQ 群:528816639
  3. //🍎 AIWROK iOS 端 window.at.callFun 实现示例

  4. // 阻塞式延迟函数 (Rhino引擎兼容)
  5. function _sleep(ms) {
  6.     var start = Date.now();
  7.     while (Date.now() - start < ms) {
  8.         // 阻塞等待
  9.     }
  10. }

  11. /*
  12. * 说明:
  13. * 此文件展示了如何在 AIWROK iOS 环境中实现 window.at.callFun 方法
  14. * 以及如何处理 H5 页面的调用请求
  15. */

  16. // 初始化 window.at 对象(在WebView上下文中)
  17. function initAtObject(webView) {
  18.     printl("初始化 window.at 对象");
  19.    
  20.     if (!webView) {
  21.         printl("错误:WebView 对象未提供");
  22.         return;
  23.     }
  24.    
  25.     // 实现一个全局的原生调用函数
  26.     webView._handleH5Call = function(methodName, params) {
  27.         printl(`WebView直接调用:${methodName},参数:${JSON.stringify(params)}`);
  28.         
  29.         // 构建模拟的请求URL
  30.         const message = {
  31.             method: methodName,
  32.             params: params,
  33.             callbackId: "direct_call"
  34.         };
  35.         const url = 'aiwrok://callFun?' + JSON.stringify(message);
  36.         
  37.         // 调用handleH5Call处理
  38.         const result = handleH5Call(url, webView);
  39.         printl(`直接调用返回结果:${result}`);
  40.         return result;
  41.     };
  42.    
  43.     // 在WebView上下文中初始化window.at对象
  44.     const initCode = `
  45.         // 创建 at 对象
  46.         window.at = window.at || {};
  47.         
  48.         // 实现 callFun 方法
  49.         window.at.callFun = function(methodName, ...args) {
  50.             console.log('H5调用方法:', methodName, '参数:', args);
  51.             
  52.             try {
  53.                 // 尝试直接调用原生方法(通过WebView的原生方法)
  54.                 if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.aiwrok) {
  55.                     console.log('使用 webkit.messageHandlers 调用');
  56.                     const message = {
  57.                         method: methodName,
  58.                         params: args,
  59.                         callbackId: Date.now() + Math.random().toString(36).substr(2, 9)
  60.                     };
  61.                     window.webkit.messageHandlers.aiwrok.postMessage(message);
  62.                     return { status: "success", message: "调用已发送" };
  63.                 } else if (window.android) {
  64.                     console.log('使用 window.android 调用');
  65.                     const message = JSON.stringify({
  66.                         method: methodName,
  67.                         params: args,
  68.                         callbackId: Date.now() + Math.random().toString(36).substr(2, 9)
  69.                     });
  70.                     return JSON.parse(window.android.callFun(message));
  71.                 } else {
  72.                     // 尝试通过prompt调用
  73.                     console.log('使用 prompt 调用');
  74.                     const message = {
  75.                         method: methodName,
  76.                         params: args,
  77.                         callbackId: Date.now() + Math.random().toString(36).substr(2, 9)
  78.                     };
  79.                     const url = 'aiwrok://callFun?' + JSON.stringify(message);
  80.                     const result = prompt(url);
  81.                     console.log('收到返回:', result);
  82.                     
  83.                     if (result) {
  84.                         try {
  85.                             const parsed = JSON.parse(result);
  86.                             console.log('解析结果:', parsed);
  87.                             return parsed.data;
  88.                         } catch (e) {
  89.                             console.error('解析返回结果失败:', e);
  90.                             return { error: '解析返回结果失败' };
  91.                         }
  92.                     }
  93.                     
  94.                     // 尝试使用模拟的原生方法
  95.                     console.log('使用模拟原生方法');
  96.                     const mockResponse = {
  97.                         status: "success",
  98.                         message: "Mock response from native",
  99.                         data: {
  100.                             timestamp: new Date().getTime(),
  101.                             platform: "iOS",
  102.                             version: "1.0.0",
  103.                             method: methodName,
  104.                             params: args
  105.                         }
  106.                     };
  107.                     return mockResponse;
  108.                 }
  109.             } catch (e) {
  110.                 console.error('调用失败:', e);
  111.                 return { error: '调用失败: ' + e.message };
  112.             }
  113.         };
  114.         
  115.         console.log('window.at.callFun 初始化完成');
  116.     `;
  117.    
  118.     // 执行初始化代码
  119.     try {
  120.         if (typeof webView.evaluateJavaScript === 'function') {
  121.             printl("使用 evaluateJavaScript 执行初始化代码");
  122.             webView.evaluateJavaScript(initCode);
  123.         } else if (typeof webView.stringByEvaluatingJavaScriptFromString === 'function') {
  124.             printl("使用 stringByEvaluatingJavaScriptFromString 执行初始化代码");
  125.             webView.stringByEvaluatingJavaScriptFromString(initCode);
  126.         } else if (typeof webView.loadUrl === 'function') {
  127.             printl("使用 loadUrl 执行初始化代码");
  128.             const url = 'javascript:' + encodeURIComponent(initCode);
  129.             webView.loadUrl(url);
  130.         } else {
  131.             printl("错误:WebView 没有执行JavaScript的方法");
  132.         }
  133.         printl("window.at.callFun 初始化完成");
  134.     } catch (e) {
  135.         printl(`初始化失败:${e.message}`);
  136.     }
  137. }

  138. // 处理基础测试方法
  139. function handleTestFunction() {
  140.     printl("处理 testFunction 调用");
  141.    
  142.     // 模拟异步操作
  143.     _sleep(500);
  144.     const result = "Hello from iOS!";
  145.     printl(`返回结果:${result}`);
  146.    
  147.     return result;
  148. }

  149. // 处理带参数的方法
  150. function handleTestWithParams(params) {
  151.     printl(`处理 testWithParams 调用,参数:${JSON.stringify(params)}`);
  152.    
  153.     // 模拟处理参数
  154.     const result = `收到参数:${params.join(', ')}`;
  155.     printl(`返回结果:${result}`);
  156.    
  157.     return result;
  158. }

  159. // 处理带回调的方法
  160. function handleTestWithCallback() {
  161.     printl("处理 testWithCallback 调用");
  162.    
  163.     // 模拟返回复杂数据
  164.     const result = {
  165.         status: "success",
  166.         message: "Callback test successful",
  167.         data: {
  168.             timestamp: new Date().getTime(),
  169.             platform: "iOS",
  170.             version: "1.0.0"
  171.         }
  172.     };
  173.    
  174.     printl(`返回结果:${JSON.stringify(result)}`);
  175.    
  176.     return result;
  177. }

  178. // 处理复杂数据传递
  179. function handleTestComplexData(dataStr) {
  180.     printl("处理 testComplexData 调用");
  181.    
  182.     try {
  183.         // 解析 JSON 数据
  184.         const data = JSON.parse(dataStr);
  185.         printl(`解析数据:${JSON.stringify(data)}`);
  186.         
  187.         // 处理数据
  188.         const result = {
  189.             received: true,
  190.             processedData: data,
  191.             timestamp: new Date().getTime(),
  192.             message: "Complex data processed successfully"
  193.         };
  194.         
  195.         printl(`返回结果:${JSON.stringify(result)}`);
  196.         
  197.         return result;
  198.     } catch (e) {
  199.         printl(`解析数据失败:${e.message}`);
  200.         return { error: `解析数据失败:${e.message}` };
  201.     }
  202. }

  203. // 处理获取设备信息
  204. function handleGetDeviceInfo() {
  205.     printl("处理 getDeviceInfo 调用");
  206.    
  207.     // 模拟设备信息
  208.     const deviceInfo = {
  209.         model: "iPhone 14 Pro",
  210.         os: "iOS",
  211.         osVersion: "16.4",
  212.         appVersion: "1.0.0",
  213.         deviceId: "device_123456",
  214.         screen: {
  215.             width: 393,
  216.             height: 852,
  217.             scale: 3
  218.         },
  219.         network: "Wi-Fi"
  220.     };
  221.    
  222.     printl(`返回设备信息:${JSON.stringify(deviceInfo)}`);
  223.    
  224.     return deviceInfo;
  225. }

  226. // 处理显示原生提示
  227. function handleShowToast(message) {
  228.     printl(`处理 showToast 调用,消息:${message}`);
  229.    
  230.     // 显示原生 Toast
  231.     try {
  232.         toast(message);
  233.         printl("Toast 显示成功");
  234.         return { success: true, message: "Toast shown successfully" };
  235.     } catch (e) {
  236.         printl(`显示 Toast 失败:${e.message}`);
  237.         return { error: `显示 Toast 失败:${e.message}` };
  238.     }
  239. }

  240. // 初始化 WebView 并加载 H5 页面
  241. function loadCallFunExample() {
  242.     printl("加载 callFun 示例页面");
  243.    
  244.     // 创建 WebView 并直接设置回调
  245.     const webView = new WebView({
  246.         // WebView初始化配置
  247.         onUrlLoading: function(url) {
  248.             printl(`拦截到URL:${url}`);
  249.             if (url.startsWith('aiwrok://callFun?')) {
  250.                 const result = handleH5Call(url, webView);
  251.                 printl(`onUrlLoading 返回结果:${result}`);
  252.                 return result;
  253.             }
  254.             return false;
  255.         },
  256.         // 其他配置
  257.         enableJavaScript: true,
  258.         enableDomStorage: true
  259.     });
  260.    
  261.     // 显示 WebView
  262.     printl("显示 WebView");
  263.     webView.show();
  264.    
  265.     // 加载示例页面
  266.     const htmlPath = project.getCodePath() + "H5.html";
  267.     printl(`加载页面:${htmlPath}`);
  268.    
  269.     webView.loadFile(htmlPath);
  270.    
  271.     // 等待页面加载完成后初始化 at 对象
  272.     _sleep(2000); // 增加等待时间,确保页面完全加载
  273.     printl("初始化 window.at 对象");
  274.     initAtObject(webView);
  275.    
  276.     printl("示例页面加载完成");
  277. }

  278. // 处理H5调用
  279. function handleH5Call(url, webView) {
  280.     printl(`收到 H5 调用:${url}`);
  281.    
  282.     // 直接返回一个固定的成功结果,不依赖URL解析
  283.     try {
  284.         // 从URL中提取方法名
  285.         let methodName = "unknown";
  286.         
  287.         // 尝试解析URL参数
  288.         let jsonPart = url.substring('aiwrok://callFun?'.length);
  289.         printl(`原始jsonPart:${jsonPart}`);
  290.         
  291.         try {
  292.             // 尝试解码URL
  293.             jsonPart = decodeURIComponent(jsonPart);
  294.             printl(`解码后的jsonPart:${jsonPart}`);
  295.             
  296.             // 尝试解析JSON
  297.             const message = JSON.parse(jsonPart);
  298.             if (message.method) {
  299.                 methodName = message.method;
  300.                 printl(`从JSON中提取的方法名:${methodName}`);
  301.             }
  302.         } catch (e) {
  303.             printl(`解析URL失败:${e.message}`);
  304.             // 如果解析失败,尝试直接从URL中提取方法名
  305.             if (url.includes('method%22%3A%22')) {
  306.                 const start = url.indexOf('method%22%3A%22') + 14;
  307.                 const end = url.indexOf('%22', start);
  308.                 if (start > 14 && end > start) {
  309.                     methodName = url.substring(start, end);
  310.                     printl(`从URL中提取的方法名:${methodName}`);
  311.                 }
  312.             }
  313.         }
  314.         
  315.         printl(`最终方法名:${methodName}`);
  316.         
  317.         // 根据方法名返回不同的结果
  318.         let result;
  319.         switch (methodName) {
  320.             case 'testFunction':
  321.                 result = "Hello from iOS!";
  322.                 break;
  323.             case 'testWithParams':
  324.                 result = "收到参数:测试参数";
  325.                 break;
  326.             case 'testWithCallback':
  327.                 result = {
  328.                     status: "success",
  329.                     message: "Callback test successful",
  330.                     data: {
  331.                         timestamp: new Date().getTime(),
  332.                         platform: "iOS",
  333.                         version: "1.0.0"
  334.                     }
  335.                 };
  336.                 break;
  337.             case 'getDeviceInfo':
  338.                 result = {
  339.                     model: "iPhone 14 Pro",
  340.                     os: "iOS",
  341.                     osVersion: "16.4",
  342.                     appVersion: "1.0.0",
  343.                     deviceId: "device_123456",
  344.                     screen: {
  345.                         width: 393,
  346.                         height: 852,
  347.                         scale: 3
  348.                     },
  349.                     network: "Wi-Fi"
  350.                 };
  351.                 break;
  352.             case 'showToast':
  353.                 // 显示Toast
  354.                 if (typeof toast === 'function') {
  355.                     toast("Hello from H5!");
  356.                 }
  357.                 result = { success: true, message: "Toast shown successfully" };
  358.                 break;
  359.             default:
  360.                 result = { error: `未知方法:${methodName}` };
  361.         }
  362.         
  363.         // 构建响应
  364.         const response = {
  365.             callbackId: "test_callback_id",
  366.             data: result
  367.         };
  368.         
  369.         const responseStr = JSON.stringify(response);
  370.         printl(`返回结果:${responseStr}`);
  371.         
  372.         // 直接返回响应字符串
  373.         return responseStr;
  374.     } catch (e) {
  375.         printl(`处理H5调用失败:${e.message}`);
  376.         const errorResponse = JSON.stringify({ error: e.message });
  377.         return errorResponse;
  378.     }
  379. }

  380. // 测试函数
  381. function testCallFunImplementation() {
  382.     printl("=== AIWROK callFun 实现测试 ===");
  383.    
  384.     // 加载示例页面
  385.     loadCallFunExample();
  386.    
  387.     printl("测试完成,请在 H5 页面中点击按钮进行测试");
  388. }

  389. // 运行测试
  390. testCallFunImplementation();

  391. /*
  392. * 使用说明:
  393. * 1. 将此脚本在 AIWROK iOS 环境中运行
  394. * 2. 它会创建一个 WebView 并加载 callFun_example.html 页面
  395. * 3. 在 H5 页面中点击各种按钮测试不同的调用方式
  396. * 4. 查看控制台输出以了解调用过程
  397. *
  398. * 注意:
  399. * - 此实现仅用于演示目的
  400. * - 实际应用中需要根据具体需求扩展方法
  401. * - 对于复杂的数据传递,建议使用 JSON 格式
  402. */
复制代码




untoH5日志打印运行过程例子nextnocontent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读
群发软件苹果脚本里H5 里的 window.at.callFun 示例
苹果脚本里H5 里的 window.at.callFun 示例
群发软件H5日志打印运行过程例子
H5日志打印运行过程例子
群发软件AIWROK软件字符串方法实用案例
AIWROK软件字符串方法实用案例
群发软件HID贝塞尔曲线运动控制器
HID贝塞尔曲线运动控制器
群发软件AIWROK苹果脚本sleep方法综合实战示例
AIWROK苹果脚本sleep方法综合实战示例
群发软件苹果脚本Line控件的多种创意用法和实际应用场景
苹果脚本Line控件的多种创意用法和实际应用场景
群发软件苹果脚本toast高级应用综合示例
苹果脚本toast高级应用综合示例
群发软件苹果智能OCR自动化助手
苹果智能OCR自动化助手
群发软件苹果脚本UI超快速点击示例
苹果脚本UI超快速点击示例
群发软件展示时间戳的各种复杂处理方法
展示时间戳的各种复杂处理方法
群发软件苹果脚本随机数实用示例
苹果脚本随机数实用示例
群发软件安卓手机脚本多种倒计时显示方式
安卓手机脚本多种倒计时显示方式
群发软件苹果脚本屏幕事件EVENT示例
苹果脚本屏幕事件EVENT示例
群发软件苹果脚本屏幕类screen例子
苹果脚本屏幕类screen例子
群发软件安卓手机config配置演示实列
安卓手机config配置演示实列
群发软件苹果脚本配置config小实例
苹果脚本配置config小实例 https://www.yuque.com/aiwork/dcvhmb/qolobpysdg0hvi2e
群发软件苹果脚本矩形类rect小实例
苹果脚本矩形类rect小实例
群发软件AIWROK安卓苹果平台设计的实用工具库
AIWROK安卓苹果平台设计的实用工具库
群发软件AIWROK软件Function导入方法实例演示
AIWROK软件Function导入方法实例演示
群发软件苹果脚本实例1项目project应用示例
苹果脚本实例1项目project应用示例
群发软件苹果脚本实例1剪贴板功能集成
苹果脚本实例1剪贴板功能集成
群发软件苹果iOS脚本Detect类系统性使用示例
苹果iOS脚本Detect类系统性使用示例
群发软件AIWROK苹果系统打印H5界面日志输出
AIWROK苹果系统打印H5界面日志输出
群发软件H5案例自动化看广告撸金币系统
H5案例自动化看广告撸金币系统
群发软件AIWROK苹果脚本H5任务执行小例子
AIWROK苹果脚本H5任务执行小例子
群发软件AIWROK软件苹果水平容器[Horizontal]小实例
AIWROK软件苹果水平容器[Horizontal]小实例
群发软件AIWROK苹果脚本实例1界面UI输入框类[Input]
AIWROK苹果脚本实例1界面UI输入框类
群发软件AIWROK软件苹果脚本案例1空白站位[Space]方法
AIWROK软件苹果脚本案例1空白站位[Space]方法
群发软件AIWROK软件苹查系统复选框用法
AIWROK软件苹查系统复选框用法
群发软件苹果AIWROK实例单选按钮组类[RadioButtonGroup]完整综合示例
苹果AIWROK实例单选按钮组类[RadioButtonGroup]完整综合示例
群发软件AIWROK软件苹果实例UI-垂直容器[Vertical]高级综合示例
AIWROK软件苹果实例UI-垂直容器[Vertical]高级综合示例
群发软件IOS苹果脚本View的完整功能实例
IOS苹果脚本View的完整功能实例
群发软件AIWROK苹果系统实例演示1标签类[Label]方法
AIWROK苹果系统实例演示1标签类[Label]方法
信息发布软件AIWROK软件苹果UI按钮Button方法示例
AIWROK软件苹果UI按钮Button方法示例
信息发布软件AIWROK软件苹果TAB界面视图示例
AIWROK软件苹果TAB界面视图示例
信息发布软件AIWROK苹果系统自带view视图简洁UI界面示例
AIWROK苹果系统自带view视图简洁UI界面示例
信息发布软件汇集HID安卓输入文字的方法和复制粘贴示例
汇集HID安卓输入文字的方法和复制粘贴示例
信息发布软件AIWROK软件找字与OCR方法汇总示例
AIWROK软件找字与OCR方法汇总示例
信息发布软件AIWROK软件找图方法汇总示例
AIWROK软件找图方法汇总示例
信息发布软件AIWROK软件滑动方法集合示例
AIWROK软件滑动方法集合示例
信息发布软件AIWROK软件安卓AIWROK汇集软件点击
AIWROK软件安卓AIWROK汇集软件点击
信息发布软件苹果系统点击方法综合示例
苹果系统点击方法综合示例
信息发布软件AIWROK苹果系统找图方法完整示例集合
AIWROK苹果系统找图方法完整示例集合
信息发布软件苹果系统找图方法完整示例集合
苹果系统找图方法完整示例集合
信息发布软件苹果IOS系统找字OCR方法例子
苹果IOS系统找字OCR方法例子
信息发布软件AIWORK软件数组高级示例
AIWORK软件数组高级示例
信息发布软件AIWROK软件运算符封装库示例
AIWROK软件运算符封装库示例
信息发布软件AIWROK软件语法运行小示例
AIWROK软件语法运行小示例
信息发布软件AIWROK软件JS循环小示例
AIWROK软件JS循环小示例
信息发布软件AIWROK软件H5网页被主脚本获取值用法
AIWROK软件H5网页被主脚本获取值用法
信息发布软件AIWROK软件创建可暂停恢复的多线程任务
AIWROK软件创建可暂停恢复的多线程任务
信息发布软件AIWROK软件类型转换方法例子
AIWROK软件类型转换方法例子
信息发布软件AIWROK软件H5脚本执行与进度显示
AIWROK软件H5脚本执行与进度显示 .
信息发布软件AIWROK软件根据时间段执行异步任务支持多线程并行处理
AIWROK软件根据时间段执行异步任务支持多线程并行处理
信息发布软件H5自动开关执行脚本功能演示
H5自动开关执行脚本功能演示
信息发布软件AIWROK软件H5单选脚本运行示例
AIWROK软件H5单选脚本运行示例
信息发布软件H5任务脚本选择与执行中心
H5任务脚本选择与执行中心
信息发布软件H5里CheckBox控件演示
H5里CheckBox控件演示
信息发布软件AIWROK软件正则用法实际例子
AIWROK软件正则用法实际例子
信息发布软件AIWROK软件权限管理器实现
AIWROK软件权限管理器实现
信息发布软件AIWORK软件节点方法无碍示例子
AIWORK软件节点方法无碍示例子
信息发布软件JSON.stringify 和 JSON.parse 完整示例
JSON.stringify 和 JSON.parse 完整示例
信息发布软件AIWROK软件展示JavaScript各种语句标识符的用法
AIWROK软件展示JavaScript各种语句标识符的用法
信息发布软件JS巧妙地组合使用各种条件语句
JS巧妙地组合使用各种条件语句
信息发布软件AIWROK手机数据库MySQL数据库截图片批量上传操作脚本
AIWROK手机数据库MySQL数据库截图片批量上传操作脚本

QQ|( 京ICP备09078825号 )

本网站信息发布软件,是可以发布论坛,发送信息到各大博客,各大b2b软件自动发布,好不夸张的说:只要手工能发在电脑打开IE能发的网站,用这个宣传软件就可以仿制动作,进行推送发到您想发送的B2B网站或是信息发布平台上,不管是后台,还是前台,都可以进行最方便的广告发布,这个广告发布软件,可以按月购买,还可以试用软件,对网站的验证码也可以完全自动对信息发布,让客户自动找上门,使企业轻松实现b2b发布,这个信息发布软件,均是本站原创正版开发,拥有正版的血统,想要新功能,欢迎提意见给我,一好的分类信息群发软件在手,舍我其谁。QQ896757558

GMT+8, 2026-4-13 11:58 , Processed in 0.356826 second(s), 50 queries .

宣传软件--信息发布软件--b2b软件广告发布软件

快速回复 返回顶部 返回列表