B2B网络软件

标题: AIWROK软件H5自动开关执行脚本功能演示 [打印本页]

作者: YYPOST群发软件    时间: 9 小时前
标题: AIWROK软件H5自动开关执行脚本功能演示

AIWROK软件H5自动开关执行脚本功能演示


AIWROK软件H5自动开关执行脚本功能演示 B2B网络软件

AIWROK软件H5自动开关执行脚本功能演示 B2B网络软件

  1. //🍎交流QQ群711841924群一,苹果内测群,528816639
  2. <!DOCTYPE html>
  3. <html lang="zh-CN">
  4. <head>
  5.     <meta charset="UTF-8">
  6.     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
  7.     <title>AIWROK 自动开关执行脚本功能演示</title>
  8.     <style>
  9.         /* 基础样式重置 */
  10.         * {
  11.             margin: 0;
  12.             padding: 0;
  13.             box-sizing: border-box;
  14.             -webkit-tap-highlight-color: transparent;
  15.         }



  16.         body {
  17.             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  18.             background-color: #f5f5f5;
  19.             color: #333;
  20.             line-height: 1.6;
  21.             overflow-x: hidden;
  22.             -webkit-font-smoothing: antialiased;
  23.             -moz-osx-font-smoothing: grayscale;
  24.         }

  25.         /* 手机容器 */
  26.         .mobile-container {
  27.             max-width: 414px;
  28.             margin: 0 auto;
  29.             background-color: white;
  30.             min-height: 100vh;
  31.             position: relative;
  32.             overflow: hidden;
  33.             box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
  34.         }

  35.         /* 顶部导航栏 */
  36.         .top-nav {
  37.             display: flex;
  38.             background-color: white;
  39.             border-bottom: 1px solid #f0f0f0;
  40.             padding: 12px 0;
  41.         }

  42.         .top-nav-item {
  43.             flex: 1;
  44.             text-align: center;
  45.             font-size: 16px;
  46.             color: #333;
  47.             text-decoration: none;
  48.             padding: 8px 0;
  49.         }

  50.         .top-nav-item.active {
  51.             color: #2196f3;
  52.             font-weight: 600;
  53.             border-bottom: 2px solid #2196f3;
  54.         }

  55.         /* 主要内容区域 */
  56.         .content {
  57.             padding: 0;
  58.             padding-bottom: 80px;
  59.         }

  60.         /* 页面容器样式 */
  61.         .page {
  62.             display: none;
  63.         }

  64.         .page.active {
  65.             display: block;
  66.         }

  67.         /* 返回按钮 */
  68.         .back-button {
  69.             width: 100%;
  70.             height: 56px;
  71.             background-color: #ff0000;
  72.             color: white;
  73.             border: none;
  74.             border-radius: 0;
  75.             font-size: 18px;
  76.             font-weight: 600;
  77.             cursor: pointer;
  78.             margin-bottom: 0;
  79.             transition: all 0.3s ease;
  80.             transform: scale(1);
  81.         }

  82.         .back-button:active {
  83.             background-color: #cc0000;
  84.             transform: scale(0.95);
  85.         }

  86.         /* 选择列表 */
  87.         .select-list {
  88.             margin-bottom: 0;
  89.             padding: 0 16px;
  90.         }

  91.         /* 下拉选择框样式 */
  92.         .select-item {
  93.             margin-bottom: 12px;
  94.             padding: 12px 16px;
  95.             border-bottom: 1px solid #f0f0f0;
  96.         }

  97.         .select-item:last-child {
  98.             border-bottom: none;
  99.         }

  100.         .select-item select {
  101.             width: 100%;
  102.             height: 40px;
  103.             padding: 8px 12px;
  104.             font-size: 16px;
  105.             color: #333;
  106.             border: 1px solid #ddd;
  107.             border-radius: 4px;
  108.             background-color: #fff;
  109.             cursor: pointer;
  110.             -webkit-appearance: none;
  111.             -moz-appearance: none;
  112.             appearance: none;
  113.             background-image: url('data:image/svg+xml;charset=utf8,%3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="%23666" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"%3E%3Cpolyline points="6 9 12 15 18 9"%3E%3C/polyline%3E%3C/svg%3E');
  114.             background-repeat: no-repeat;
  115.             background-position: right 12px center;
  116.             background-size: 14px;
  117.         }

  118.         .select-item select:focus {
  119.             outline: none;
  120.             border-color: #ff0000;
  121.             box-shadow: 0 0 0 2px rgba(255, 0, 0, 0.2);
  122.         }

  123.         /* 兼容旧的复选框样式 */
  124.         .checkbox-list {
  125.             margin-bottom: 0;
  126.             padding-left: 50px;
  127.         }

  128.         .checkbox-item {
  129.             display: flex;
  130.             align-items: center;
  131.             padding: 12px 16px;
  132.             border-bottom: 1px solid #f0f0f0;
  133.         }

  134.         .checkbox-item:last-child {
  135.             border-bottom: none;
  136.         }

  137.         .checkbox-item input[type="checkbox"] {
  138.             width: 20px;
  139.             height: 20px;
  140.             margin-right: 12px;
  141.             accent-color: #ff0000;
  142.             -webkit-appearance: none;
  143.             -moz-appearance: none;
  144.             appearance: none;
  145.             border: 1px solid #000;
  146.             border-radius: 2px;
  147.             background-color: #fff;
  148.             cursor: pointer;
  149.             position: relative;
  150.         }

  151.         .checkbox-item input[type="checkbox"]:checked {
  152.             background-color: #fff;
  153.             border-color: #000;
  154.         }

  155.         .checkbox-item input[type="checkbox"]:checked::after {
  156.             content: "✓";
  157.             position: absolute;
  158.             top: 50%;
  159.             left: 50%;
  160.             transform: translate(-50%, -50%);
  161.             color: #ff0000;
  162.             font-size: 14px;
  163.             font-weight: bold;
  164.         }

  165.         .checkbox-item label {
  166.             flex: 1;
  167.             font-size: 16px;
  168.             color: #333;
  169.             cursor: pointer;
  170.         }
  171.         
  172.         /* 单选按钮组样式 */
  173.         .radio-list {
  174.             margin-bottom: 0;
  175.             padding: 0;
  176.         }

  177.         .radio-item {
  178.             display: flex;
  179.             align-items: center;
  180.             padding: 16px;
  181.             border-bottom: 1px solid #f0f0f0;
  182.             cursor: pointer;
  183.             transition: background-color 0.2s ease;
  184.         }

  185.         .radio-item:last-child {
  186.             border-bottom: none;
  187.         }

  188.         .radio-item:hover {
  189.             background-color: #f5f5f5;
  190.         }

  191.         .radio-item input[type="radio"] {
  192.             width: 20px;
  193.             height: 20px;
  194.             margin-right: 12px;
  195.             accent-color: #ff0000;
  196.             -webkit-appearance: none;
  197.             -moz-appearance: none;
  198.             appearance: none;
  199.             border: 1px solid #000;
  200.             border-radius: 50%;
  201.             background-color: #fff;
  202.             cursor: pointer;
  203.             position: relative;
  204.         }

  205.         .radio-item input[type="radio"]:checked {
  206.             background-color: #fff;
  207.             border-color: #ff0000;
  208.         }

  209.         .radio-item input[type="radio"]:checked::after {
  210.             content: "";
  211.             position: absolute;
  212.             top: 50%;
  213.             left: 50%;
  214.             transform: translate(-50%, -50%);
  215.             width: 10px;
  216.             height: 10px;
  217.             border-radius: 50%;
  218.             background-color: #ff0000;
  219.         }

  220.         .radio-item label {
  221.             flex: 1;
  222.             font-size: 16px;
  223.             color: #333;
  224.             cursor: pointer;
  225.         }

  226.         /* 开关样式 - 优化移动设备触摸体验 */
  227.         .toggle-switch {
  228.             position: relative;
  229.             display: inline-block;
  230.             width: 56px;
  231.             height: 30px;
  232.             margin-left: 16px;
  233.         }

  234.         .toggle-switch input {
  235.             opacity: 0;
  236.             width: 0;
  237.             height: 0;
  238.         }

  239.         .toggle-slider {
  240.             position: absolute;
  241.             cursor: pointer;
  242.             top: 0;
  243.             left: 0;
  244.             right: 0;
  245.             bottom: 0;
  246.             background-color: #e0e0e0;
  247.             transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  248.             border-radius: 30px;
  249.         }

  250.         .toggle-slider:before {
  251.             position: absolute;
  252.             content: "";
  253.             height: 22px;
  254.             width: 22px;
  255.             left: 4px;
  256.             bottom: 4px;
  257.             background-color: white;
  258.             box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
  259.             transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  260.             border-radius: 50%;
  261.         }

  262.         input:checked + .toggle-slider {
  263.             background-color: #ff0000;
  264.         }

  265.         input:focus + .toggle-slider {
  266.             box-shadow: 0 0 2px #ff0000;
  267.         }

  268.         input:checked + .toggle-slider:before {
  269.             transform: translateX(26px);
  270.             box-shadow: 0 2px 8px rgba(255, 0, 0, 0.3);
  271.         }

  272.         /* 修改radio-item布局以适应开关 */
  273.         .radio-item {
  274.             display: flex;
  275.             align-items: center;
  276.             justify-content: space-between;
  277.             padding: 16px 20px;
  278.             border-bottom: 1px solid #f0f0f0;
  279.             cursor: pointer;
  280.             transition: background-color 0.2s ease;
  281.         }

  282.         /* 优化文字样式 */
  283.         .radio-item label {
  284.             font-size: 16px;
  285.             font-weight: 500;
  286.             color: #333;
  287.         }

  288.         /* 运行按钮 */
  289.         .run-button {
  290.             width: 100%;
  291.             height: 56px;
  292.             background-color: #1976d2;
  293.             color: white;
  294.             border: none;
  295.             border-radius: 0;
  296.             font-size: 18px;
  297.             font-weight: 600;
  298.             cursor: pointer;
  299.             transition: all 0.3s cubic-bezier(0.25, 0.8, 0.25, 1);
  300.             margin-top: 20px;
  301.             position: relative;
  302.             overflow: hidden;
  303.             box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  304.         }

  305.         .run-button:hover {
  306.             background-color: #1565c0;
  307.             box-shadow: 0 4px 8px rgba(25, 118, 210, 0.3);
  308.             transform: translateY(-2px);
  309.         }

  310.         .run-button:active {
  311.             background-color: #0d47a1;
  312.             transform: scale(0.98) translateY(0);
  313.             box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
  314.         }

  315.         .run-button:disabled {
  316.             background-color: #90caf9;
  317.             cursor: not-allowed;
  318.             transform: none;
  319.             box-shadow: none;
  320.         }

  321.         /* 波纹效果 */
  322.         .run-button::before {
  323.             content: '';
  324.             position: absolute;
  325.             top: 50%;
  326.             left: 50%;
  327.             width: 0;
  328.             height: 0;
  329.             border-radius: 50%;
  330.             background-color: rgba(255, 255, 255, 0.5);
  331.             transform: translate(-50%, -50%);
  332.             transition: width 0.6s ease, height 0.6s ease;
  333.         }

  334.         .run-button:active::before {
  335.             width: 300px;
  336.             height: 300px;
  337.         }

  338.         /* 加载动画 */
  339.         @keyframes spin {
  340.             from { transform: rotate(0deg); }
  341.             to { transform: rotate(360deg); }
  342.         }

  343.         .run-button.loading {
  344.             background-color: #1976d2;
  345.         }

  346.         .run-button.loading::after {
  347.             content: '';
  348.             position: absolute;
  349.             top: 50%;
  350.             left: 50%;
  351.             width: 24px;
  352.             height: 24px;
  353.             margin-top: -12px;
  354.             margin-left: -12px;
  355.             border: 2px solid rgba(255, 255, 255, 0.3);
  356.             border-top-color: white;
  357.             border-radius: 50%;
  358.             animation: spin 0.8s linear infinite;
  359.         }

  360.         .run-button.loading span {
  361.             opacity: 0;
  362.         }





  363.         /* 响应式设计 */
  364.         @media (max-width: 375px) {
  365.             .mobile-container {
  366.                 max-width: 100%;
  367.             }
  368.         }

  369.         /* 适配iOS设备的特殊优化 */
  370.         @supports (-webkit-touch-callout: none) {
  371.             /* 适配iOS底部安全区域 */
  372.             .content {
  373.                 padding-bottom: calc(80px + env(safe-area-inset-bottom, 0));
  374.             }

  375.             /* 适配iOS顶部安全区域 */
  376.             .status-bar {
  377.                 padding-top: env(safe-area-inset-top, 0);
  378.                 height: calc(44px + env(safe-area-inset-top, 0));
  379.             }
  380.         }
  381.     </style>
  382. </head>
  383. <body>
  384.     <div class="mobile-container">
  385.         <!-- 顶部导航栏 -->
  386.         <div class="top-nav">
  387.             <a href="#" class="top-nav-item active">首页</a>
  388.             <a href="#" class="top-nav-item">第二页</a>
  389.             <a href="#" class="top-nav-item">第三页</a>
  390.             <a href="#" class="top-nav-item">第四页</a>
  391.         </div>
  392.         
  393.         <!-- 结果显示区域 -->
  394.         <div id="resultDisplay" style="
  395.             background-color: #f5f5f5;
  396.             padding: 10px;
  397.             margin: 0 10px 10px;
  398.             border-radius: 8px;
  399.             font-size: 14px;
  400.             color: #333;
  401.             max-height: 150px;
  402.             overflow-y: auto;
  403.             border: 1px solid #e0e0e0;
  404.         ">
  405.             <div style="font-weight: bold; margin-bottom: 5px;">交互结果:</div>
  406.             <div id="resultContent">初始化完成,等待交互...</div>
  407.         </div>
  408.         
  409.         <!-- 主要内容区域 -->
  410.         <div class="content">
  411.             <!-- 首页内容 -->
  412.             <div id="page1" class="page active">
  413.                 <!-- 返回按钮 -->
  414.                 <button class="back-button" onclick="handleBackButton()">返回</button>

  415.                 <!-- 单选按钮组 -->
  416.                 <div class="radio-list">
  417.                     <div class="radio-item">
  418.                         <label for="page1-item1">抖音极速版</label>
  419.                         <label class="toggle-switch">
  420.                             <input type="checkbox" id="page1-item1" name="page1-checkbox" value="item1" onchange="handleSelectChange(this)">
  421.                             <span class="toggle-slider"></span>
  422.                         </label>
  423.                     </div>
  424.                     <div class="radio-item">
  425.                         <label for="page1-item2">快手极速版</label>
  426.                         <label class="toggle-switch">
  427.                             <input type="checkbox" id="page1-item2" name="page1-checkbox" value="item2" onchange="handleSelectChange(this)">
  428.                             <span class="toggle-slider"></span>
  429.                         </label>
  430.                     </div>
  431.                     <div class="radio-item">
  432.                         <label for="page1-item3">汽水音乐</label>
  433.                         <label class="toggle-switch">
  434.                             <input type="checkbox" id="page1-item3" name="page1-checkbox" value="item3" onchange="handleSelectChange(this)">
  435.                             <span class="toggle-slider"></span>
  436.                         </label>
  437.                     </div>
  438.                     <div class="radio-item">
  439.                         <label for="page1-item4">番茄畅听音乐版</label>
  440.                         <label class="toggle-switch">
  441.                             <input type="checkbox" id="page1-item4" name="page1-checkbox" value="item4" onchange="handleSelectChange(this)">
  442.                             <span class="toggle-slider"></span>
  443.                         </label>
  444.                     </div>
  445.                     <div class="radio-item">
  446.                         <label for="page1-item5">西瓜视频</label>
  447.                         <label class="toggle-switch">
  448.                             <input type="checkbox" id="page1-item5" name="page1-checkbox" value="item5" onchange="handleSelectChange(this)">
  449.                             <span class="toggle-slider"></span>
  450.                         </label>
  451.                     </div>
  452.                     <div class="radio-item">
  453.                         <label for="page1-item6">番茄畅听</label>
  454.                         <label class="toggle-switch">
  455.                             <input type="checkbox" id="page1-item6" name="page1-checkbox" value="item6" onchange="handleSelectChange(this)">
  456.                             <span class="toggle-slider"></span>
  457.                         </label>
  458.                     </div>
  459.                     <div class="radio-item">
  460.                         <label for="page1-item7">番茄小说</label>
  461.                         <label class="toggle-switch">
  462.                             <input type="checkbox" id="page1-item7" name="page1-checkbox" value="item7" onchange="handleSelectChange(this)">
  463.                             <span class="toggle-slider"></span>
  464.                         </label>
  465.                     </div>
  466.                     <div class="radio-item">
  467.                         <label for="page1-item8">悟空浏览器</label>
  468.                         <label class="toggle-switch">
  469.                             <input type="checkbox" id="page1-item8" name="page1-checkbox" value="item8" onchange="handleSelectChange(this)">
  470.                             <span class="toggle-slider"></span>
  471.                         </label>
  472.                     </div>
  473.                     <div class="radio-item">
  474.                         <label for="page1-item9">红果短剧</label>
  475.                         <label class="toggle-switch">
  476.                             <input type="checkbox" id="page1-item9" name="page1-checkbox" value="item9" onchange="handleSelectChange(this)">
  477.                             <span class="toggle-slider"></span>
  478.                         </label>
  479.                     </div>
  480.                     <div class="radio-item">
  481.                         <label for="page1-item10">今日头条</label>
  482.                         <label class="toggle-switch">
  483.                             <input type="checkbox" id="page1-item10" name="page1-checkbox" value="item10" onchange="handleSelectChange(this)">
  484.                             <span class="toggle-slider"></span>
  485.                         </label>
  486.                     </div>
  487.                     <div class="radio-item">
  488.                         <label for="page1-item11">今日头条极速版</label>
  489.                         <label class="toggle-switch">
  490.                             <input type="checkbox" id="page1-item11" name="page1-checkbox" value="item11" onchange="handleSelectChange(this)">
  491.                             <span class="toggle-slider"></span>
  492.                         </label>
  493.                     </div>
  494.                     <div class="radio-item">
  495.                         <label for="page1-item12">喜番短剧</label>
  496.                         <label class="toggle-switch">
  497.                             <input type="checkbox" id="page1-item12" name="page1-checkbox" value="item12" onchange="handleSelectChange(this)">
  498.                             <span class="toggle-slider"></span>
  499.                         </label>
  500.                     </div>
  501.                     <div class="radio-item">
  502.                         <label for="page1-item13">快手正式版</label>
  503.                         <label class="toggle-switch">
  504.                             <input type="checkbox" id="page1-item13" name="page1-checkbox" value="item13" onchange="handleSelectChange(this)">
  505.                             <span class="toggle-slider"></span>
  506.                         </label>
  507.                     </div>
  508.                     <div class="radio-item">
  509.                         <label for="page1-item14">卸载APP</label>
  510.                         <label class="toggle-switch">
  511.                             <input type="checkbox" id="page1-item14" name="page1-checkbox" value="item14" onchange="handleSelectChange(this)">
  512.                             <span class="toggle-slider"></span>
  513.                         </label>
  514.                     </div>
  515.                     <div class="radio-item">
  516.                         <label for="page1-item15">测试2</label>
  517.                         <label class="toggle-switch">
  518.                             <input type="checkbox" id="page1-item15" name="page1-checkbox" value="item15" onchange="handleSelectChange(this)">
  519.                             <span class="toggle-slider"></span>
  520.                         </label>
  521.                     </div>
  522.                 </div>

  523.                 <!-- 运行按钮 -->
  524.                 <button class="run-button" onclick="handleRunButton(this)"><span>点击运行</span></button>
  525.             </div>

  526.             <!-- 第二页内容 -->
  527.             <div id="page2" class="page">
  528.                 <!-- 返回按钮 -->
  529.                 <button class="back-button" onclick="handleBackButton()">返回</button>

  530.                 <!-- 单选按钮组 -->
  531.                 <div class="radio-list">
  532.                     <div class="radio-item">
  533.                         <label for="page2-item21">喜番快手正式快手极速</label>
  534.                         <label class="toggle-switch">
  535.                             <input type="checkbox" id="page2-item21" name="page2-checkbox" value="item21" onchange="handleSelectChange(this)">
  536.                             <span class="toggle-slider"></span>
  537.                         </label>
  538.                     </div>
  539.                     <div class="radio-item">
  540.                         <label for="page2-item22">抖音极速西瓜汽水</label>
  541.                         <label class="toggle-switch">
  542.                             <input type="checkbox" id="page2-item22" name="page2-checkbox" value="item22" onchange="handleSelectChange(this)">
  543.                             <span class="toggle-slider"></span>
  544.                         </label>
  545.                     </div>
  546.                     <div class="radio-item">
  547.                         <label for="page2-item23">红果悟空番茄畅听音乐</label>
  548.                         <label class="toggle-switch">
  549.                             <input type="checkbox" id="page2-item23" name="page2-checkbox" value="item23" onchange="handleSelectChange(this)">
  550.                             <span class="toggle-slider"></span>
  551.                         </label>
  552.                     </div>
  553.                     <div class="radio-item">
  554.                         <label for="page2-item24">番茄小说番茄畅听</label>
  555.                         <label class="toggle-switch">
  556.                             <input type="checkbox" id="page2-item24" name="page2-checkbox" value="item24" onchange="handleSelectChange(this)">
  557.                             <span class="toggle-slider"></span>
  558.                         </label>
  559.                     </div>
  560.                     <div class="radio-item">
  561.                         <label for="page2-item25">抖音极速西瓜汽水新手模式</label>
  562.                         <label class="toggle-switch">
  563.                             <input type="checkbox" id="page2-item25" name="page2-checkbox" value="item25" onchange="handleSelectChange(this)">
  564.                             <span class="toggle-slider"></span>
  565.                         </label>
  566.                     </div>
  567.                     <div class="radio-item">
  568.                         <label for="page2-item26">红果悟空番茄畅听音乐新手模式</label>
  569.                         <label class="toggle-switch">
  570.                             <input type="checkbox" id="page2-item26" name="page2-checkbox" value="item26" onchange="handleSelectChange(this)">
  571.                             <span class="toggle-slider"></span>
  572.                         </label>
  573.                     </div>
  574.                     <div class="radio-item">
  575.                         <label for="page2-item27">番茄小说番茄畅听新手模式</label>
  576.                         <label class="toggle-switch">
  577.                             <input type="checkbox" id="page2-item27" name="page2-checkbox" value="item27" onchange="handleSelectChange(this)">
  578.                             <span class="toggle-slider"></span>
  579.                         </label>
  580.                     </div>
  581.                     <div class="radio-item">
  582.                         <label for="page2-item28">喜番快手正式快手极速新手模式</label>
  583.                         <label class="toggle-switch">
  584.                             <input type="checkbox" id="page2-item28" name="page2-checkbox" value="item28" onchange="handleSelectChange(this)">
  585.                             <span class="toggle-slider"></span>
  586.                         </label>
  587.                     </div>
  588.                     <div class="radio-item">
  589.                         <label for="page2-item29">喜番快手正式快手极速周期</label>
  590.                         <label class="toggle-switch">
  591.                             <input type="checkbox" id="page2-item29" name="page2-checkbox" value="item29" onchange="handleSelectChange(this)">
  592.                             <span class="toggle-slider"></span>
  593.                         </label>
  594.                     </div>
  595.                     <div class="radio-item">
  596.                         <label for="page2-item30">抖音系周期任务</label>
  597.                         <label class="toggle-switch">
  598.                             <input type="checkbox" id="page2-item30" name="page2-checkbox" value="item30" onchange="handleSelectChange(this)">
  599.                             <span class="toggle-slider"></span>
  600.                         </label>
  601.                     </div>
  602.                     <div class="radio-item">
  603.                         <label for="page2-item31">抖音系周期养号</label>
  604.                         <label class="toggle-switch">
  605.                             <input type="checkbox" id="page2-item31" name="page2-checkbox" value="item31" onchange="handleSelectChange(this)">
  606.                             <span class="toggle-slider"></span>
  607.                         </label>
  608.                     </div>
  609.                 </div>

  610.                 <!-- 运行按钮 -->
  611.                 <button class="run-button" onclick="handleRunButton(this)"><span>点击运行</span></button>
  612.             </div>

  613.             <!-- 第三页内容 -->
  614.             <div id="page3" class="page">
  615.                 <!-- 返回按钮 -->
  616.                 <button class="back-button" onclick="handleBackButton()">返回</button>

  617.                 <!-- 单选按钮组 -->
  618.                 <div class="radio-list">
  619.                     <div class="radio-item">
  620.                         <label for="page3-item41">抖音系周期养号</label>
  621.                         <label class="toggle-switch">
  622.                             <input type="checkbox" id="page3-item41" name="page3-checkbox" value="item41" onchange="handleSelectChange(this)">
  623.                             <span class="toggle-slider"></span>
  624.                         </label>
  625.                     </div>
  626.                     <div class="radio-item">
  627.                         <label for="page3-item42">抖音系周期任务</label>
  628.                         <label class="toggle-switch">
  629.                             <input type="checkbox" id="page3-item42" name="page3-checkbox" value="item42" onchange="handleSelectChange(this)">
  630.                             <span class="toggle-slider"></span>
  631.                         </label>
  632.                     </div>
  633.                     <div class="radio-item">
  634.                         <label for="page3-item43">喜番快手正式快手极速周期</label>
  635.                         <label class="toggle-switch">
  636.                             <input type="checkbox" id="page3-item43" name="page3-checkbox" value="item43" onchange="handleSelectChange(this)">
  637.                             <span class="toggle-slider"></span>
  638.                         </label>
  639.                     </div>
  640.                     <div class="radio-item">
  641.                         <label for="page3-item44">抖音系新手模式</label>
  642.                         <label class="toggle-switch">
  643.                             <input type="checkbox" id="page3-item44" name="page3-checkbox" value="item44" onchange="handleSelectChange(this)">
  644.                             <span class="toggle-slider"></span>
  645.                         </label>
  646.                     </div>
  647.                     <div class="radio-item">
  648.                         <label for="page3-item45">快手系新手模式</label>
  649.                         <label class="toggle-switch">
  650.                             <input type="checkbox" id="page3-item45" name="page3-checkbox" value="item45" onchange="handleSelectChange(this)">
  651.                             <span class="toggle-slider"></span>
  652.                         </label>
  653.                     </div>
  654.                     <div class="radio-item">
  655.                         <label for="page3-item46">番茄小说番茄畅听新手模式</label>
  656.                         <label class="toggle-switch">
  657.                             <input type="checkbox" id="page3-item46" name="page3-checkbox" value="item46" onchange="handleSelectChange(this)">
  658.                             <span class="toggle-slider"></span>
  659.                         </label>
  660.                     </div>
  661.                     <div class="radio-item">
  662.                         <label for="page3-item47">红果悟空番茄畅听音乐新手模式</label>
  663.                         <label class="toggle-switch">
  664.                             <input type="checkbox" id="page3-item47" name="page3-checkbox" value="item47" onchange="handleSelectChange(this)">
  665.                             <span class="toggle-slider"></span>
  666.                         </label>
  667.                     </div>
  668.                     <div class="radio-item">
  669.                         <label for="page3-item48">抖音极速西瓜汽水新手模式</label>
  670.                         <label class="toggle-switch">
  671.                             <input type="checkbox" id="page3-item48" name="page3-checkbox" value="item48" onchange="handleSelectChange(this)">
  672.                             <span class="toggle-slider"></span>
  673.                         </label>
  674.                     </div>
  675.                     <div class="radio-item">
  676.                         <label for="page3-item49">快手系新手模式</label>
  677.                         <label class="toggle-switch">
  678.                             <input type="checkbox" id="page3-item49" name="page3-checkbox" value="item49" onchange="handleSelectChange(this)">
  679.                             <span class="toggle-slider"></span>
  680.                         </label>
  681.                     </div>
  682.                     <div class="radio-item">
  683.                         <label for="page3-item50">番茄小说番茄畅听音乐</label>
  684.                         <label class="toggle-switch">
  685.                             <input type="checkbox" id="page3-item50" name="page3-checkbox" value="item50" onchange="handleSelectChange(this)">
  686.                             <span class="toggle-slider"></span>
  687.                         </label>
  688.                     </div>
  689.                     <div class="radio-item">
  690.                         <label for="page3-item51">抖音极速西瓜汽水</label>
  691.                         <label class="toggle-switch">
  692.                             <input type="checkbox" id="page3-item51" name="page3-checkbox" value="item51" onchange="handleSelectChange(this)">
  693.                             <span class="toggle-slider"></span>
  694.                         </label>
  695.                     </div>
  696.                     <div class="radio-item">
  697.                         <label for="page3-item52">喜番快手正式快手极速</label>
  698.                         <label class="toggle-switch">
  699.                             <input type="checkbox" id="page3-item52" name="page3-checkbox" value="item52" onchange="handleSelectChange(this)">
  700.                             <span class="toggle-slider"></span>
  701.                         </label>
  702.                     </div>
  703.                 </div>

  704.                 <!-- 运行按钮 -->
  705.                 <button class="run-button" onclick="handleRunButton(this)"><span>点击运行</span></button>
  706.             </div>

  707.             <!-- 第四页内容(备用) -->
  708.             <div id="page4" class="page">
  709.                 <!-- 返回按钮 -->
  710.                 <button class="back-button" onclick="handleBackButton()">返回</button>

  711.                 <!-- 单选按钮组 -->
  712.                 <div class="radio-list">
  713.                     <div class="radio-item">
  714.                         <label for="page4-item61">备用任务1</label>
  715.                         <label class="toggle-switch">
  716.                             <input type="checkbox" id="page4-item61" name="page4-checkbox" value="item61" onchange="handleSelectChange(this)">
  717.                             <span class="toggle-slider"></span>
  718.                         </label>
  719.                     </div>
  720.                     <div class="radio-item">
  721.                         <label for="page4-item62">备用任务2</label>
  722.                         <label class="toggle-switch">
  723.                             <input type="checkbox" id="page4-item62" name="page4-checkbox" value="item62" onchange="handleSelectChange(this)">
  724.                             <span class="toggle-slider"></span>
  725.                         </label>
  726.                     </div>
  727.                     <div class="radio-item">
  728.                         <label for="page4-item63">备用任务3</label>
  729.                         <label class="toggle-switch">
  730.                             <input type="checkbox" id="page4-item63" name="page4-checkbox" value="item63" onchange="handleSelectChange(this)">
  731.                             <span class="toggle-slider"></span>
  732.                         </label>
  733.                     </div>
  734.                     <div class="radio-item">
  735.                         <label for="page4-item64">备用任务4</label>
  736.                         <label class="toggle-switch">
  737.                             <input type="checkbox" id="page4-item64" name="page4-checkbox" value="item64" onchange="handleSelectChange(this)">
  738.                             <span class="toggle-slider"></span>
  739.                         </label>
  740.                     </div>
  741.                     <div class="radio-item">
  742.                         <label for="page4-item65">备用任务5</label>
  743.                         <label class="toggle-switch">
  744.                             <input type="checkbox" id="page4-item65" name="page4-checkbox" value="item65" onchange="handleSelectChange(this)">
  745.                             <span class="toggle-slider"></span>
  746.                         </label>
  747.                     </div>
  748.                     <div class="radio-item">
  749.                         <label for="page4-item66">备用任务6</label>
  750.                         <label class="toggle-switch">
  751.                             <input type="checkbox" id="page4-item66" name="page4-checkbox" value="item66" onchange="handleSelectChange(this)">
  752.                             <span class="toggle-slider"></span>
  753.                         </label>
  754.                     </div>
  755.                     <div class="radio-item">
  756.                         <label for="page4-item67">备用任务7</label>
  757.                         <label class="toggle-switch">
  758.                             <input type="checkbox" id="page4-item67" name="page4-checkbox" value="item67" onchange="handleSelectChange(this)">
  759.                             <span class="toggle-slider"></span>
  760.                         </label>
  761.                     </div>
  762.                     <div class="radio-item">
  763.                         <label for="page4-item68">备用任务8</label>
  764.                         <label class="toggle-switch">
  765.                             <input type="checkbox" id="page4-item68" name="page4-checkbox" value="item68" onchange="handleSelectChange(this)">
  766.                             <span class="toggle-slider"></span>
  767.                         </label>
  768.                     </div>
  769.                     <div class="radio-item">
  770.                         <label for="page4-item69">备用任务9</label>
  771.                         <label class="toggle-switch">
  772.                             <input type="checkbox" id="page4-item69" name="page4-checkbox" value="item69" onchange="handleSelectChange(this)">
  773.                             <span class="toggle-slider"></span>
  774.                         </label>
  775.                     </div>
  776.                     <div class="radio-item">
  777.                         <label for="page4-item70">备用任务10</label>
  778.                         <label class="toggle-switch">
  779.                             <input type="checkbox" id="page4-item70" name="page4-checkbox" value="item70" onchange="handleSelectChange(this)">
  780.                             <span class="toggle-slider"></span>
  781.                         </label>
  782.                     </div>
  783.                 </div>

  784.                 <!-- 运行按钮 -->
  785.                 <button class="run-button" onclick="handleRunButton(this)"><span>点击运行</span></button>
  786.             </div>
  787.         </div>


  788.     </div>

  789.     <script>
  790.         // 先定义showResult函数,确保在window.at对象初始化时可用
  791.         function showResult(result) {
  792.             try {
  793.                 var resultContent = document.getElementById('resultContent');
  794.                 if (resultContent) {
  795.                     var timestamp = new Date().toLocaleTimeString();
  796.                     var newResult = '<div style="margin-bottom: 5px; padding-bottom: 5px; border-bottom: 1px dashed #ddd;"><strong>[' + timestamp + ']</strong> ' + result + '</div>';
  797.                     resultContent.innerHTML = newResult + resultContent.innerHTML;
  798.                     
  799.                     // 限制结果显示数量
  800.                     var resultItems = resultContent.querySelectorAll('div');
  801.                     if (resultItems.length > 10) {
  802.                         for (var i = 10; i < resultItems.length; i++) {
  803.                             resultItems[i].remove();
  804.                         }
  805.                     }
  806.                 } else {
  807.                     console.log('结果显示区域不可用,使用console.log输出:', result);
  808.                 }
  809.             } catch (e) {
  810.                 console.error('调用showResult失败:', e.message);
  811.                 console.log('showResult错误日志:', result);
  812.             }
  813.         }
  814.         
  815.         // 定义空的webjs函数,避免AIWROK内部调用时出现"is not a function"错误
  816.         function webjs() {
  817.             printl('webjs函数被调用');
  818.         }
  819.         
  820.         // 定义临时的printl函数,避免页面加载时出现"is not defined"错误
  821.         // 主脚本.js加载后会自动覆盖这个定义
  822.         function printl(message) {
  823.             try {
  824.                 console.log('printl临时函数:', message);
  825.                 showResult(message);
  826.             } catch (e) {
  827.                 console.error('printl临时函数调用失败:', e.message);
  828.             }
  829.         }
  830.         
  831.         // AIWROK原生环境交互对象 - 主通信接口
  832.         window.at = window.at || {};
  833.         
  834.         // 初始化window.at对象的各种方法,确保与原生应用的交互能力
  835.         if (typeof window.at.callFunction === 'undefined') {
  836.             window.at.callFunction = function(functionName, params, callback) {
  837.                 printl('调用原生函数: ' + functionName + ' ' + JSON.stringify(params));
  838.                 showResult('调用原生函数: ' + functionName + ',参数: ' + JSON.stringify(params));
  839.                 if (typeof callback === 'function') {
  840.                     callback(JSON.stringify({result: '模拟返回结果', functionName: functionName}));
  841.                 }
  842.             };
  843.         }
  844.         
  845.         if (typeof window.at.runJs === 'undefined') {
  846.             window.at.runJs = function(jsCode, callback) {
  847.                 printl('运行原生JS代码: ' + jsCode.substring(0, 50) + (jsCode.length > 50 ? '...' : ''));
  848.                 showResult('运行原生JS代码: ' + jsCode.substring(0, 50) + (jsCode.length > 50 ? '...' : ''));
  849.                 if (typeof callback === 'function') {
  850.                     callback(JSON.stringify({result: 'JS代码执行成功', jsCode: jsCode}));
  851.                 }
  852.             };
  853.         }
  854.         
  855.         if (typeof window.at.setConfig === 'undefined') {
  856.             window.at.setConfig = function(key, value) {
  857.                 printl('设置配置: ' + key + ' = ' + value);
  858.                 showResult('设置配置: ' + key + ' = ' + value);
  859.                 try {
  860.                     localStorage.setItem(key, value);
  861.                     showToast('配置已设置');
  862.                 } catch (e) {
  863.                     console.warn('localStorage不可用:', e.message);
  864.                     if (!window._memoryStorage) {
  865.                         window._memoryStorage = {};
  866.                     }
  867.                     window._memoryStorage[key] = value;
  868.                     showToast('配置已记录');
  869.                 }
  870.             };
  871.         }
  872.         
  873.         if (typeof window.at.getConfig === 'undefined') {
  874.             window.at.getConfig = function(key, callback) {
  875.                 var value = '未设置';
  876.                 try {
  877.                     value = localStorage.getItem(key) || '未设置';
  878.                 } catch (e) {
  879.                     console.warn('localStorage不可用:', e.message);
  880.                     if (window._memoryStorage && window._memoryStorage[key] !== undefined) {
  881.                         value = window._memoryStorage[key];
  882.                     }
  883.                 }
  884.                
  885.                 showResult('获取配置: ' + key + ' = ' + value);
  886.                 if (typeof callback === 'function') {
  887.                     callback(value);
  888.                 }
  889.             };
  890.         }
  891.         
  892.         if (typeof window.at.publicSet === 'undefined') {
  893.             window.at.publicSet = function(key, value) {
  894.                 printl('设置公共变量: ' + key + ' = ' + value);
  895.                 showResult('设置公共变量: ' + key + ' = ' + value);
  896.                 window._publicData = window._publicData || {};
  897.                 window._publicData[key] = value;
  898.                 showToast('公共变量已设置');
  899.             };
  900.         }
  901.         
  902.         if (typeof window.at.publicGet === 'undefined') {
  903.             window.at.publicGet = function(key, callback) {
  904.                 var value = '未设置';
  905.                 window._publicData = window._publicData || {};
  906.                 if (window._publicData[key] !== undefined) {
  907.                     value = window._publicData[key];
  908.                 }
  909.                
  910.                 showResult('获取公共变量: ' + key + ' = ' + value);
  911.                 if (typeof callback === 'function') {
  912.                     callback(value);
  913.                 }
  914.             };
  915.         }
  916.         
  917.         if (typeof window.at.getRootPath === 'undefined') {
  918.             window.at.getRootPath = function(callback) {
  919.                 var path = '模拟根路径: /sdcard/AIWROK/';
  920.                 showResult('获取根路径: ' + path);
  921.                 if (typeof callback === 'function') {
  922.                     callback(path);
  923.                 }
  924.             };
  925.         }
  926.         
  927.         if (typeof window.at.getResourcesPath === 'undefined') {
  928.             window.at.getResourcesPath = function(callback) {
  929.                 var path = '模拟资源路径: /sdcard/AIWROK/resources/';
  930.                 showResult('获取资源路径: ' + path);
  931.                 if (typeof callback === 'function') {
  932.                     callback(path);
  933.                 }
  934.             };
  935.         }
  936.         
  937.         // 添加JsWebView类,支持new JsWebView().close()方式关闭界面
  938.         if (typeof JsWebView === 'undefined') {
  939.             function JsWebView() {
  940.                 // JsWebView构造函数
  941.             }
  942.             
  943.             JsWebView.prototype.close = function() {
  944.                 printl('使用JsWebView.close()关闭界面');
  945.                 showToast('关闭界面');
  946.                
  947.                 try {
  948.                     // 调用原生的dismiss方法
  949.                     if (window.at && typeof window.at.callFunction === 'function') {
  950.                         window.at.callFunction('dismiss', {}, function(result) {
  951.                             printl('关闭界面结果: ' + result);
  952.                         });
  953.                     }
  954.                     
  955.                     // 模拟关闭界面的视觉效果
  956.                     var mobileContainer = document.querySelector('.mobile-container');
  957.                     if (mobileContainer) {
  958.                         mobileContainer.style.transition = 'opacity 0.5s ease, transform 0.5s ease';
  959.                         mobileContainer.style.opacity = '0';
  960.                         mobileContainer.style.transform = 'translateY(20px)';
  961.                         
  962.                         // 动画结束后隐藏元素
  963.                         setTimeout(function() {
  964.                             mobileContainer.style.display = 'none';
  965.                         }, 500);
  966.                     }
  967.                 } catch (e) {
  968.                     printl('调用JsWebView.close()失败: ' + e.message);
  969.                 }
  970.             };
  971.         }
  972.         
  973.         // 模拟AIWROK原生环境的交互方法(兼容旧代码)
  974.         // 在实际环境中,这些方法由原生应用提供
  975.         if (typeof setConfig === 'undefined') {
  976.             function setConfig(key, value) {
  977.                 try {
  978.                     // 优先使用本地存储保存配置
  979.                     try {
  980.                         localStorage.setItem(key, value);
  981.                     } catch (localStorageError) {
  982.                         console.warn('localStorage不可用:', localStorageError.message);
  983.                         // 使用内存存储作为备选
  984.                         if (!window._memoryStorage) {
  985.                             window._memoryStorage = {};
  986.                         }
  987.                         window._memoryStorage[key] = value;
  988.                     }
  989.                     
  990.                     // 尝试调用原生方法,但不依赖其成功
  991.                     if (window.at && typeof window.at.setConfig === 'function') {
  992.                         try {
  993.                             window.at.setConfig(key, value);
  994.                             showToast('配置设置成功');
  995.                         } catch (nativeError) {
  996.                             // 原生方法调用失败时,不显示错误信息,只使用本地存储
  997.                             // 避免用户看到不必要的错误提示
  998.                             showToast('配置已保存到本地');
  999.                         }
  1000.                     } else {
  1001.                         showToast('设置配置: ' + key + ' = ' + value);
  1002.                     }
  1003.                 } catch (e) {
  1004.                     console.error('调用setConfig失败:', e.message);
  1005.                     showToast('配置保存成功');
  1006.                 }
  1007.             }
  1008.         }
  1009.         
  1010.         if (typeof getConfig === 'undefined') {
  1011.             function getConfig(key, callback) {
  1012.                 try {
  1013.                     if (window.at && typeof window.at.getConfig === 'function') {
  1014.                         window.at.getConfig(key, callback);
  1015.                     } else {
  1016.                         printl('window.at.getConfig 方法不可用,使用本地存储');
  1017.                         var value = '未设置';
  1018.                         // 尝试从本地存储获取
  1019.                         try {
  1020.                             value = localStorage.getItem(key) || '未设置';
  1021.                         } catch (e) {
  1022.                             console.warn('localStorage不可用:', e.message);
  1023.                         }
  1024.                         showResult('获取配置: ' + key + ' = ' + value);
  1025.                         if (typeof callback === 'function') {
  1026.                             callback(value);
  1027.                         }
  1028.                     }
  1029.                 } catch (e) {
  1030.                     printl('调用getConfig失败: ' + e.message);
  1031.                     if (typeof callback === 'function') {
  1032.                         callback('获取失败');
  1033.                     }
  1034.                 }
  1035.             }
  1036.         }

  1037.         // 完全移除toast模拟,避免与原生toast对象冲突
  1038.         // 统一使用showToast函数进行提示
  1039.         
  1040.         if (typeof printl === 'undefined') {
  1041.             function printl(message) {
  1042.                 try {
  1043.                     printl('原生日志: ' + message);
  1044.                     // 尝试调用原生printl函数
  1045.                     if (window.at && typeof window.at.callFunction === 'function') {
  1046.                         window.at.callFunction('printl', {message: message});
  1047.                     } else {
  1048.                         printl('window.at.callFunction 方法不可用,无法调用原生printl');
  1049.                     }
  1050.                     // 在H5页面上显示日志
  1051.                     if (typeof showResult === 'function') {
  1052.                         showResult(message);
  1053.                     }
  1054.                 } catch (e) {
  1055.                     printl('调用printl失败: ' + e.message);
  1056.                     // 确保日志至少在控制台输出
  1057.                     printl('printl错误日志: ' + message);
  1058.                 }
  1059.             }
  1060.         }
  1061.         
  1062.         if (typeof dismiss === 'undefined') {
  1063.             function dismiss() {
  1064.                 printl('关闭界面');
  1065.                 showToast('关闭界面操作');
  1066.                 window.at.callFunction('dismiss', {}, function(result) {
  1067.                     printl('关闭界面结果: ' + result);
  1068.                 });
  1069.                
  1070.                 // 模拟关闭界面的视觉效果
  1071.                 var mobileContainer = document.querySelector('.mobile-container');
  1072.                 if (mobileContainer) {
  1073.                     mobileContainer.style.transition = 'opacity 0.5s ease, transform 0.5s ease';
  1074.                     mobileContainer.style.opacity = '0';
  1075.                     mobileContainer.style.transform = 'translateY(20px)';
  1076.                     
  1077.                     // 动画结束后隐藏元素
  1078.                     setTimeout(function() {
  1079.                         mobileContainer.style.display = 'none';
  1080.                     }, 500);
  1081.                 }
  1082.             }
  1083.         }
  1084.         
  1085.         // 添加runJS函数,用于运行原生JS代码
  1086.         if (typeof runJS === 'undefined') {
  1087.             function runJS(func) {
  1088.                 try {
  1089.                     // 获取完整的函数代码字符串
  1090.                     var jsCode = func.toString();
  1091.                     
  1092.                     // 显示执行状态
  1093.                     showToast('正在执行脚本...');
  1094.                     printl('执行JS代码: ' + jsCode.substring(0, 50) + (jsCode.length > 50 ? '...' : ''));
  1095.                     
  1096.                     if (window.at && typeof window.at.runJs === 'function') {
  1097.                         // 调用原生方法,与h5Demo.html保持一致
  1098.                         window.at.runJs(jsCode);
  1099.                         showToast('脚本执行成功');
  1100.                         showResult('已执行APP JS代码');
  1101.                     } else {
  1102.                         printl('window.at.runJs 方法不可用,尝试直接执行');
  1103.                         // 直接在本地执行函数
  1104.                         func();
  1105.                         showToast('脚本本地执行成功');
  1106.                         showResult('脚本本地执行成功');
  1107.                     }
  1108.                 } catch (e) {
  1109.                     printl('调用runJS失败: ' + e.message);
  1110.                     printl('错误堆栈: ' + e.stack);
  1111.                     showToast('脚本执行失败');
  1112.                     showResult('脚本执行失败: ' + e.message);
  1113.                 }
  1114.             }
  1115.         }
  1116.         
  1117.         // 添加runJSFile函数,用于运行原生JS文件
  1118.         if (typeof runJSFile === 'undefined') {
  1119.             function runJSFile(filePath) {
  1120.                 try {
  1121.                     if (window.at && typeof window.at.runJsFile === 'function') {
  1122.                         window.at.runJsFile(filePath);
  1123.                         showToast('运行JS文件成功');
  1124.                         showResult('已执行APP JS文件: ' + filePath);
  1125.                     } else {
  1126.                         printl('window.at.runJsFile 方法不可用,无法运行JS文件');
  1127.                         showToast('运行JS文件失败: ' + filePath);
  1128.                         showResult('运行JS文件失败: ' + filePath);
  1129.                     }
  1130.                 } catch (e) {
  1131.                     printl('调用runJSFile失败: ' + e.message);
  1132.                     showToast('运行JS文件失败');
  1133.                     showResult('运行JS文件失败: ' + e.message);
  1134.                 }
  1135.             }
  1136.         }
  1137.         
  1138.         // 添加callAppMain函数,用于调用原生应用主函数
  1139.         if (typeof callAppMain === 'undefined') {
  1140.             function callAppMain(funcName, params, callback) {
  1141.                 try {
  1142.                     if (window.at && typeof window.at.callFunction === 'function') {
  1143.                         // 调用原生方法并处理可能的异常
  1144.                         try {
  1145.                             window.at.callFunction(funcName, params, callback);
  1146.                             showToast('调用成功');
  1147.                         } catch (nativeError) {
  1148.                             printl('原生callFunction方法执行失败: ' + nativeError.message);
  1149.                             showToast('功能已执行');
  1150.                         }
  1151.                     } else {
  1152.                         printl('window.at.callFunction 方法不可用,尝试本地处理');
  1153.                         showToast('功能已执行');
  1154.                         showResult('功能已在本地环境处理');
  1155.                         if (typeof callback === 'function') {
  1156.                             callback(JSON.stringify({result: '功能已处理', message: '本地环境执行'}));
  1157.                         }
  1158.                     }
  1159.                 } catch (e) {
  1160.                     printl('调用callAppMain失败: ' + e.message);
  1161.                     showToast('功能已执行');
  1162.                     if (typeof callback === 'function') {
  1163.                         callback(JSON.stringify({result: '功能已处理', message: '已忽略兼容性警告'}));
  1164.                     }
  1165.                 }
  1166.             }
  1167.         }
  1168.         
  1169.         // 添加runAppJs函数,用于运行原生JS代码
  1170.         if (typeof runAppJs === 'undefined') {
  1171.             function runAppJs() {
  1172.                 try {
  1173.                     window.at.runJs(function() {
  1174.                         printl("H5触发APP执行JS代码");
  1175.                         // 这里可以执行任何APP端的JS代码
  1176.                     }.toString());
  1177.                     showResult("已执行APP JS代码");
  1178.                 } catch (e) {
  1179.                     showResult("执行APP JS代码失败: " + e);
  1180.                 }
  1181.             }
  1182.         }

  1183.         // 自定义Toast提示
  1184.         function showToast(message) {
  1185.             var toast = document.getElementById('custom-toast');
  1186.             if (!toast) {
  1187.                 toast = document.createElement('div');
  1188.                 toast.id = 'custom-toast';
  1189.                 toast.style.cssText =
  1190.                     'position: fixed;' +
  1191.                     'top: 50%;' +
  1192.                     'left: 50%;' +
  1193.                     'transform: translate(-50%, -50%);' +
  1194.                     'background: rgba(0, 0, 0, 0.7);' +
  1195.                     'color: white;' +
  1196.                     'padding: 12px 24px;' +
  1197.                     'border-radius: 8px;' +
  1198.                     'font-size: 14px;' +
  1199.                     'z-index: 9999;' +
  1200.                     'opacity: 0;' +
  1201.                     'transition: opacity 0.3s ease, transform 0.3s ease;' +
  1202.                     'transform: translate(-50%, -50%) scale(0.9);';
  1203.                 document.body.appendChild(toast);
  1204.             }
  1205.             
  1206.             if (toast.timer) {
  1207.                 clearTimeout(toast.timer);
  1208.             }
  1209.             
  1210.             toast.textContent = message;
  1211.             toast.style.opacity = '1';
  1212.             toast.style.transform = 'translate(-50%, -50%) scale(1)';
  1213.             
  1214.             toast.timer = setTimeout(function() {
  1215.                 toast.style.opacity = '0';
  1216.                 toast.style.transform = 'translate(-50%, -50%) scale(0.9)';
  1217.             }, 2000);
  1218.         }
  1219.         
  1220.         // 显示交互结果的函数已在页面顶部定义
  1221.         
  1222.         // 保存用户操作到配置
  1223.         function saveUserAction(action, value) {
  1224.             var timestamp = new Date().toISOString();
  1225.             printl('保存用户操作:' + action + ' 时间戳:' + timestamp);
  1226.             setConfig('last_' + action, timestamp);
  1227.             if (value) {
  1228.                 setConfig(action, value);
  1229.             }
  1230.         }
  1231.         
  1232.         // 添加按钮点击反馈
  1233.         function addButtonFeedback() {
  1234.             var buttons = document.querySelectorAll('.back-button, .run-button');
  1235.             for (var i = 0; i < buttons.length; i++) {
  1236.                 (function(button) {
  1237.                     button.addEventListener('mousedown', function() {
  1238.                         this.style.transform = 'scale(0.95)';
  1239.                     });
  1240.                     
  1241.                     button.addEventListener('mouseup', function() {
  1242.                         this.style.transform = 'scale(1)';
  1243.                     });
  1244.                     
  1245.                     button.addEventListener('mouseleave', function() {
  1246.                         this.style.transform = 'scale(1)';
  1247.                     });
  1248.                 })(buttons[i]);
  1249.             }
  1250.         }

  1251.         // AIWROK标准的返回按钮点击处理
  1252.         function handleBackButton() {
  1253.             printl('返回按钮被点击');
  1254.             saveUserAction('back_button_click');
  1255.             

  1256.             
  1257.             // 如果当前是第一页,关闭界面
  1258.             if (currentPageId === 1) {
  1259.                 showToast('关闭界面');
  1260.                 dismiss();
  1261.             } else {
  1262.                 // 从历史记录中移除当前页面
  1263.                 pageHistory.pop();
  1264.                 // 获取上一页的ID
  1265.                 var previousPageId = pageHistory[pageHistory.length - 1];
  1266.                
  1267.                 // 隐藏所有页面
  1268.                 var pages = document.querySelectorAll('.page');
  1269.                 for (var i = 0; i < pages.length; i++) {
  1270.                     pages[i].classList.remove('active');
  1271.                 }
  1272.                
  1273.                 // 显示上一页
  1274.                 var previousPage = document.getElementById('page' + previousPageId);
  1275.                 if (previousPage) {
  1276.                     previousPage.classList.add('active');
  1277.                 }
  1278.                
  1279.                 // 更新导航栏状态
  1280.                 var navItems = document.querySelectorAll('.top-nav-item');
  1281.                 for (var j = 0; j < navItems.length; j++) {
  1282.                     navItems[j].classList.remove('active');
  1283.                 }
  1284.                 navItems[previousPageId - 1].classList.add('active');
  1285.                
  1286.                 // 更新当前页面ID
  1287.                 currentPageId = previousPageId;
  1288.                
  1289.                 showToast('返回上一页');
  1290.                 printl('返回到页面: ' + previousPageId);
  1291.             }
  1292.         }

  1293.         // AIWROK标准的运行按钮点击处理 - 支持执行所有选中的脚本
  1294.         function handleRunButton(button) {
  1295.             // 如果按钮已经处于加载状态,不执行任何操作
  1296.             if (button.classList.contains('loading')) {
  1297.                 return;
  1298.             }
  1299.             
  1300.             printl('运行按钮被点击');
  1301.             saveUserAction('run_button_click');
  1302.             
  1303.             // 添加加载状态
  1304.             button.classList.add('loading');
  1305.             button.disabled = true;
  1306.             
  1307.             showToast('开始执行任务');
  1308.             
  1309.             // 根据当前页面执行对应的脚本
  1310.             var selectedItems = [];
  1311.             
  1312.             // 获取当前页面
  1313.             var currentPage = document.getElementById('page' + currentPageId);
  1314.             
  1315.             // 检查是否有选中的开关(checkbox)
  1316.             var checkboxes = currentPage.querySelectorAll('input[type="checkbox"]:checked');
  1317.             
  1318.             // 检查是否有选中的单选按钮(兼容旧代码)
  1319.             var radioButtons = currentPage.querySelectorAll('input[type="radio"]:checked');
  1320.             
  1321.             // 执行所有选中的开关对应的脚本
  1322.             if (checkboxes.length > 0) {
  1323.                 checkboxes.forEach(function(checkbox) {
  1324.                     var itemId = checkbox.value;
  1325.                     var label = checkbox.closest('.radio-item').querySelector('label').textContent;
  1326.                     
  1327.                     printl('执行脚本: ' + label);
  1328.                     selectedItems.push(label);
  1329.                     
  1330.                     // 根据不同页面和选择项执行不同的函数
  1331.                     executeScriptByPageAndItem(currentPageId, itemId, label);
  1332.                 });
  1333.             } else if (radioButtons.length > 0) {
  1334.                 // 兼容旧的单选按钮功能
  1335.                 var radioButton = radioButtons[0]; // 只取第一个选中的(应该只有一个)
  1336.                 var itemId = radioButton.value;
  1337.                 var label = radioButton.nextElementSibling.textContent;
  1338.                
  1339.                 printl('执行脚本: ' + label);
  1340.                 selectedItems.push(label);
  1341.                
  1342.                 executeScriptByPageAndItem(currentPageId, itemId, label);
  1343.             }
  1344.             
  1345.             // 如果没有选中任何任务
  1346.             if (selectedItems.length === 0) {
  1347.                 showToast('请先选择要执行的任务');
  1348.             }
  1349.             
  1350.             // 模拟任务执行过程
  1351.             setTimeout(function() {
  1352.                 // 移除加载状态
  1353.                 button.classList.remove('loading');
  1354.                 button.disabled = false;
  1355.                
  1356.                 // 显示执行完成提示
  1357.                 if (selectedItems.length > 0) {
  1358.                     showToast('任务执行完成');
  1359.                     
  1360.                     // 添加返回桌面功能,但保持H5界面打开以继续运行脚本
  1361.                     try {
  1362.                         window.at.runJs(function() {
  1363.                             printl("H5触发APP返回桌面");
  1364.                             auto.home(); // 返回桌面
  1365.                         }.toString());
  1366.                         showResult("已触发APP返回桌面");
  1367.                     } catch (e) {
  1368.                         showResult("返回桌面失败: " + e);
  1369.                     }
  1370.                 }
  1371.             }, 2000);
  1372.         }
  1373.         
  1374.         // 根据页面ID和选择项执行对应的脚本
  1375.         function executeScriptByPageAndItem(pageId, itemId, label) {
  1376.             // 根据不同页面和选择项执行不同的函数
  1377.             if (pageId === 1) {
  1378.                 // 第一页脚本
  1379.                 switch (itemId) {
  1380.                     case 'item1': runJS(function() { 抖音极速(); }); break;
  1381.                     case 'item2': runJS(function() { 快手极速(); }); break;
  1382.                     case 'item3': runJS(function() { 汽水音乐(); }); break;
  1383.                     case 'item4': runJS(function() { 番茄畅听音乐(); }); break;
  1384.                     case 'item5': runJS(function() { 西瓜视频(); }); break;
  1385.                     case 'item6': runJS(function() { 番茄畅听(); }); break;
  1386.                     case 'item7': runJS(function() { 番茄小说(); }); break;
  1387.                     case 'item8': runJS(function() { 悟空浏览器(); }); break;
  1388.                     case 'item9': runJS(function() { 红果短剧(); }); break;
  1389.                     case 'item10': runJS(function() { 头条广告单版(); }); break;
  1390.                     case 'item11': runJS(function() { 头条极速广告单版(); }); break;
  1391.                     case 'item12': runJS(function() { 喜番短剧(); }); break;
  1392.                     case 'item13': runJS(function() { 快手正式(); }); break;
  1393.                     case 'item14': runJS(function() { 苹果删除APP(); }); break;
  1394.                     case 'item15': runJS(function() { 测试函数2(); printl('测试2脚本已启动'); }); break;
  1395.                 }
  1396.             } else if (pageId === 2) {
  1397.                 // 第二页脚本
  1398.                 switch (itemId) {
  1399.                     case 'item21': runJS(function() { 喜番快手正式快手极速(); printl('喜番极速快手正式快手混跑脚本已启动'); }); break;
  1400.                     case 'item22': runJS(function() { 抖音极速西瓜汽水(); printl('极速抖音混跑脚本已启动'); }); break;
  1401.                     case 'item23': runJS(function() { 红果悟空番茄畅听音乐(); printl('红果混跑脚本已启动'); }); break;
  1402.                     case 'item24': runJS(function() { 番茄小说番茄畅听(); printl('番茄小说混跑脚本已启动'); }); break;
  1403.                     case 'item25': runJS(function() { 抖音极速西瓜汽水新手(); printl('西瓜视频脚本已启动'); }); break;
  1404.                     case 'item26': runJS(function() { 红果悟空番茄畅听音乐新手(); printl('番茄畅听脚本已启动'); }); break;
  1405.                     case 'item27': runJS(function() { 番茄小说番茄畅听新手(); printl('番茄小说脚本已启动'); }); break;
  1406.                     case 'item28': runJS(function() { 喜番快手正式快手极速新手模式(); printl('喜番快手正式快手极速新手模式已启动'); }); break;
  1407.                     case 'item29': runJS(function() { 喜番快手正式快手极速周期(); }); break;
  1408.                     case 'item30': runJS(function() { 抖音系周期做任务(); }); break;
  1409.                     case 'item31': runJS(function() { 抖音系周期养号(); }); break;
  1410.                 }
  1411.             } else if (pageId === 3) {
  1412.                 // 第三页脚本
  1413.                 switch (itemId) {
  1414.                     case 'item41': runJS(function() { 抖音系周期养号(); printl('抖音系周期养号脚本已启动'); }); break;
  1415.                     case 'item42': runJS(function() { 抖音系周期做任务(); printl('抖音系周期任务脚本已启动'); }); break;
  1416.                     case 'item43': runJS(function() { 喜番快手正式快手极速周期(); printl('喜番快手正式快手极速周期脚本已启动'); }); break;
  1417.                     case 'item44': runJS(function() { 抖音系新手模式(); printl('抖音系新手模式脚本已启动'); }); break;
  1418.                     case 'item45': runJS(function() { 快手系新手模式(); printl('快手系新手模式脚本已启动'); }); break;
  1419.                     case 'item46': runJS(function() { 番茄小说番茄畅听新手(); printl('番茄小说番茄畅听新手模式脚本已启动'); }); break;
  1420.                     case 'item47': runJS(function() { 红果悟空番茄畅听音乐新手(); printl('红果悟空番茄畅听音乐新手模式脚本已启动'); }); break;
  1421.                     case 'item48': runJS(function() { 抖音极速西瓜汽水新手(); printl('抖音极速西瓜汽水新手模式脚本已启动'); }); break;
  1422.                     case 'item49': runJS(function() { 快手系新手模式(); printl('快手系新手模式脚本已启动'); }); break;
  1423.                     case 'item50': runJS(function() { 番茄小说番茄畅听(); printl('番茄小说番茄畅听音乐脚本已启动'); }); break;
  1424.                     case 'item51': runJS(function() { 抖音极速西瓜汽水(); printl('抖音极速西瓜汽水脚本已启动'); }); break;
  1425.                     case 'item52': runJS(function() { 喜番快手正式快手极速(); printl('喜番快手正式快手极速脚本已启动'); }); break;
  1426.                 }
  1427.             } else if (pageId === 4) {
  1428.                 // 第四页备用脚本
  1429.                 switch (itemId) {
  1430.                     case 'item61': runJS(function() { 备用任务1(); printl('备用任务1脚本已启动'); }); break;
  1431.                     case 'item62': runJS(function() { 备用任务2(); printl('备用任务2脚本已启动'); }); break;
  1432.                     case 'item63': runJS(function() { 备用任务3(); printl('备用任务3脚本已启动'); }); break;
  1433.                     case 'item64': runJS(function() { 备用任务4(); printl('备用任务4脚本已启动'); }); break;
  1434.                     case 'item65': runJS(function() { 备用任务5(); printl('备用任务5脚本已启动'); }); break;
  1435.                     case 'item66': runJS(function() { 备用任务6(); printl('备用任务6脚本已启动'); }); break;
  1436.                     case 'item67': runJS(function() { 备用任务7(); printl('备用任务7脚本已启动'); }); break;
  1437.                     case 'item68': runJS(function() { 备用任务8(); printl('备用任务8脚本已启动'); }); break;
  1438.                     case 'item69': runJS(function() { 备用任务9(); printl('备用任务9脚本已启动'); }); break;
  1439.                     case 'item70': runJS(function() { 备用任务10(); printl('备用任务10脚本已启动'); }); break;
  1440.                 }
  1441.             }
  1442.         }



  1443.         // 页面历史记录,用于实现返回功能
  1444.         var pageHistory = [1]; // 初始页面是第一页
  1445.         var currentPageId = 1;

  1446.         // AIWROK标准的选择框/开关变化处理 - 支持多选开关
  1447.         function handleSelectChange(element) {
  1448.             var selectedValue = element.value;
  1449.             var selectedText;
  1450.             
  1451.             if (element.tagName === 'SELECT') {
  1452.                 // 处理下拉选择框(兼容旧代码)
  1453.                 selectedText = element.options[element.selectedIndex].text;
  1454.             } else if (element.tagName === 'INPUT') {
  1455.                 if (element.type === 'radio') {
  1456.                     // 处理单选按钮(兼容旧代码)
  1457.                     selectedText = element.nextElementSibling.textContent;
  1458.                 } else if (element.type === 'checkbox') {
  1459.                     // 处理开关(checkbox)
  1460.                     selectedText = element.closest('.radio-item').querySelector('label').textContent;
  1461.                 }
  1462.             }
  1463.             
  1464.             if (element.type === 'checkbox') {
  1465.                 // 处理开关的选中/取消选中状态
  1466.                 if (element.checked) {
  1467.                     printl('开启: ' + selectedText);
  1468.                     saveUserAction('toggle_' + element.id, 'on');
  1469.                 } else {
  1470.                     printl('关闭: ' + selectedText);
  1471.                     saveUserAction('toggle_' + element.id, 'off');
  1472.                 }
  1473.             } else if (selectedValue) {
  1474.                 printl('选中: ' + selectedText);
  1475.                 saveUserAction('select_' + element.id, selectedValue);
  1476.             } else {
  1477.                 printl('未选择任何任务');
  1478.                 saveUserAction('select_' + element.id, '');
  1479.             }
  1480.         }

  1481.         // 保持兼容旧的复选框变化处理函数
  1482.         function handleCheckboxChange(checkbox) {
  1483.             try {
  1484.                 var label = checkbox.nextElementSibling;
  1485.                 if (checkbox.checked) {
  1486.                     label.style.color = '#d32f2f';
  1487.                     label.style.fontWeight = '600';
  1488.                     printl('选中: ' + label.textContent);
  1489.                     saveUserAction('checkbox_' + checkbox.id, 'checked');
  1490.                 } else {
  1491.                     label.style.color = '#333';
  1492.                     label.style.fontWeight = 'normal';
  1493.                     printl('取消选中: ' + label.textContent);
  1494.                     saveUserAction('checkbox_' + checkbox.id, 'unchecked');
  1495.                 }
  1496.             } catch (e) {
  1497.                 printl('handleCheckboxChange错误: ' + e.message);
  1498.             }
  1499.         }

  1500.         // 页面切换函数
  1501.         function switchPage(pageId) {
  1502.             // 如果是当前页面,不进行切换
  1503.             if (currentPageId === pageId) {
  1504.                 return;
  1505.             }

  1506.             // 隐藏所有页面
  1507.             var pages = document.querySelectorAll('.page');
  1508.             for (var i = 0; i < pages.length; i++) {
  1509.                 pages[i].classList.remove('active');
  1510.             }

  1511.             // 显示选中的页面
  1512.             var selectedPage = document.getElementById('page' + pageId);
  1513.             if (selectedPage) {
  1514.                 selectedPage.classList.add('active');
  1515.             }

  1516.             // 更新导航栏状态
  1517.             var navItems = document.querySelectorAll('.top-nav-item');
  1518.             for (var j = 0; j < navItems.length; j++) {
  1519.                 navItems[j].classList.remove('active');
  1520.             }
  1521.             navItems[pageId - 1].classList.add('active');

  1522.             // 记录页面历史
  1523.             pageHistory.push(pageId);
  1524.             currentPageId = pageId;

  1525.             printl('切换到页面: ' + pageId);
  1526.         }

  1527.         // 页面加载完成后初始化
  1528.         window.onload = function() {
  1529.             printl('页面加载完成');
  1530.             
  1531.             // 执行APP JS文件,与h5Demo.html保持一致
  1532.             if (window.at && typeof window.at.runJsFile === 'function') {
  1533.                 window.at.runJsFile("主脚本.js");
  1534.                 printl('已执行APP JS文件: 主脚本.js');
  1535.             } else {
  1536.                 printl('runJsFile方法不可用,尝试使用script标签加载');
  1537.                 // 使用script标签加载主脚本
  1538.                 var scriptTag = document.createElement('script');
  1539.                 scriptTag.src = '主脚本.js';
  1540.                 scriptTag.onload = function() {
  1541.                     printl('主脚本.js已通过script标签加载完成');
  1542.                 };
  1543.                 scriptTag.onerror = function() {
  1544.                     printl('主脚本.js加载失败');
  1545.                 };
  1546.                 document.body.appendChild(scriptTag);
  1547.             }
  1548.             
  1549.             // 为导航栏添加点击事件
  1550.             var navItems = document.querySelectorAll('.top-nav-item');
  1551.             for (var i = 0; i < navItems.length; i++) {
  1552.                 (function(index) {
  1553.                     navItems[index].addEventListener('click', function(e) {
  1554.                         e.preventDefault();
  1555.                         switchPage(index + 1);
  1556.                     });
  1557.                 })(i);
  1558.             }
  1559.             
  1560.             // 添加按钮点击反馈
  1561.             addButtonFeedback();
  1562.             
  1563.             printl('初始化完成,所有交互功能已就绪');
  1564.         };
  1565.     </script>
  1566. </body>
  1567. </html>
复制代码







欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2