ms-vite-plugin 1.5.15 → 1.5.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";var x=Object.create;var M=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var C=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of N(e))!z.call(t,r)&&r!==o&&M(t,r,{get:()=>e[r],enumerable:!(i=$(e,r))||i.enumerable});return t};var W=(t,e,o)=>(o=t!=null?x(q(t)):{},C(e||!t||!t.__esModule?M(o,"default",{value:t,enumerable:!0}):o,t));var K=exports&&exports.__createBinding||(Object.create?(function(t,e,o,i){i===void 0&&(i=o);var r=Object.getOwnPropertyDescriptor(e,o);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[o]}}),Object.defineProperty(t,i,r)}):(function(t,e,o,i){i===void 0&&(i=o),t[i]=e[o]})),A=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),O=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(o){var i=[];for(var r in o)Object.prototype.hasOwnProperty.call(o,r)&&(i[i.length]=r);return i},t(e)};return function(e){if(e&&e.__esModule)return e;var o={};if(e!=null)for(var i=t(e),r=0;r<i.length;r++)i[r]!=="default"&&K(o,e,i[r]);return A(o,e),o}})(),D=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const T=D(require("archiver")),E=require("child_process"),s=O(require("fs-extra")),F=O(require("os")),n=O(require("path")),B=require("./stopGuardPlugin"),G=require("./luaBundle"),L=require("./scriptProtect"),H=D(require("vite-plugin-bundle-obfuscator"));async function R(t,e){const o=(0,T.default)("zip",{zlib:{level:9}}),i=s.createWriteStream(e);return new Promise((r,c)=>{o.directory(t,!1).on("error",a=>c(a)).pipe(i),i.on("close",()=>r()),o.finalize()})}async function I(t,e){const o=[];async function i(r){const c=await s.readdir(r,{withFileTypes:!0});for(const a of c){const f=n.resolve(r,a.name);a.isDirectory()?await i(f):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&o.push(n.relative(e,f))}}return await i(t),o}function Q(){const t=[{cmd:n.join(F.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:n.join(F.homedir(),".KuaiJSDevloper","python","bin","python"),args:["--version"]},{cmd:"python",args:["--version"]},{cmd:"python3",args:["--version"]},{cmd:"python3.14",args:["--version"]}];for(const e of t)try{const o=(0,E.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),i=(o.stdout||o.stderr||"").trim();if(i&&/Python\s+3\.14(\.\d+)?/i.test(i))return{ok:!0,path:e.cmd,version:i}}catch{}return{ok:!1}}async function U(t){async function e(o){const i=await s.readdir(o,{withFileTypes:!0});for(const r of i){const c=n.join(o,r.name);if(r.isDirectory())if(r.name==="__pycache__"){const a=await s.readdir(c,{withFileTypes:!0});for(const f of a){const P=n.join(c,f.name);if(f.isFile()&&f.name.endsWith(".cpython-314.pyc")){const S=n.dirname(c),b=f.name.replace(/\.cpython-314\.pyc$/,".pyc"),j=n.join(S,b);await s.move(P,j,{overwrite:!0})}}try{await s.remove(c)}catch{}}else await e(c);else if(r.isFile())if(r.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await s.move(c,a,{overwrite:!0})}else r.name.endsWith(".py")&&await s.remove(c)}}await e(t)}const V=["Minify","Weak","Medium","Strong"];async function X(t){const e=n.join(t,"obfuscator.json");if(!await s.pathExists(e))return{enabled:!0,preset:"Medium",bundle:!0};try{const o=await s.readJSON(e),i=o?.enabled!==!1,r=o?.bundle!==!1,c=Y(o?.preset);return{enabled:i,preset:c,bundle:r}}catch(o){return console.error("\u274C \u65E0\u6CD5\u8BFB\u53D6 obfuscator.json"),console.error(o instanceof Error?o.message:String(o)),process.exit(1),{enabled:!0,preset:"Medium",bundle:!0}}}function Y(t){if(typeof t!="string")return"Medium";const e=V.find(o=>o.toLowerCase()===t.trim().toLowerCase());return e||(console.warn(`\u26A0\uFE0F obfuscator.json \u7684 preset \u65E0\u6548: ${t}\uFF0C\u5DF2\u6539\u7528 Medium`),"Medium")}function Z(t){const e=n.resolve(__dirname,"..","..");return[n.join(e,"node_modules/@gamely/prometheus-cli/bin/cli.js"),n.join(e,"..","@gamely/prometheus-cli/bin/cli.js")].find(i=>s.pathExistsSync(i))}const k=async(t=!0,e)=>{const o=n.join(e,"scripts"),i=await s.pathExists(n.join(o,"main.js"))||await s.pathExists(n.join(o,"main.ts")),r=await s.pathExists(n.join(o,"main.py")),c=await s.pathExists(n.join(o,"main.lua"));if(i){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:l}=await import("vite"),u=n.join(e,"obfuscator.json");await s.pathExists(u)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - obfuscator.json"),process.exit(1));const w=await s.readJSON(u),m=w.scriptProtect===!0,{enabled:_,scriptProtect:y,...p}=w,d=n.join(e,t?"dist":"msbundle"),h=await I(o,o);await s.remove(d);const g=!t&&m?(0,L.createScriptProtectHelpers)():[];!t&&m&&console.log("\u{1F510} \u5DF2\u542F\u7528 JS \u539F\u751F\u4FDD\u62A4\uFF08scriptProtect=true\uFF09");for(const v of h)await l({root:e,build:{lib:{entry:{[n.basename(v,n.extname(v))]:`./scripts/${v}`},fileName:()=>v.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,B.createStopGuardPlugin)(),...t?[]:[...m?[(0,L.createScriptProtectPlugin)(g)]:[],_?(0,H.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...p,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1,reservedNames:[...p.reservedNames||[],...g]}}):[],...m?[(0,L.createKjstEmbedPlugin)()]:[]]]})}if(t)return;const a=n.join(e,"msbundle");if(await s.ensureDir(a),(r||c)&&await s.copy(n.join(e,"scripts"),n.join(a,"scripts")),r){const l=Q();if(l.ok){console.log(`\u2705 \u68C0\u6D4B\u5230 ${l.version} (${l.path})`);const u=(0,E.spawnSync)(l.path,["-m","compileall","scripts"],{encoding:"utf8",cwd:a});u.status===0?(console.log("\u2705 \u6210\u529F\u7F16\u8BD1\u6240\u6709 Python \u6587\u4EF6"),await U(n.join(a,"scripts"))):(console.error("\u274C \u7F16\u8BD1 Python \u6587\u4EF6\u5931\u8D25"),console.error(u.stderr),process.exit(1))}else console.warn("\u26A0\uFE0F \u672A\u68C0\u6D4B\u5230 Python 3.14\uFF0C\u8BF7\u786E\u4FDD\u5728\u76EE\u6807\u8FD0\u884C\u73AF\u5883\u5B89\u88C5 Python 3.14")}else if(c){const l=await X(e),u=n.join(a,"scripts");if(l.bundle?await(0,G.bundleLuaScripts)(u):console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u5355\u6587\u4EF6\u5408\u5E76\uFF08obfuscator.json bundle=false\uFF09"),!l.enabled)console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u6DF7\u6DC6\uFF08obfuscator.json enabled=false\uFF09");else{const w=[],m=async y=>{const p=await s.readdir(y,{withFileTypes:!0});for(const d of p){const h=n.join(y,d.name);d.isDirectory()?await m(h):d.isFile()&&d.name.endsWith(".lua")&&w.push(h)}};await m(u);const _=Z(e);_||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const y of w){const p=n.relative(u,y);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${p} (preset=${l.preset})`);const d=(0,E.spawnSync)(process.execPath,[_,p,"--preset",l.preset],{cwd:u,encoding:"utf8"});d.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",p),console.error(d.stderr||d.stdout||""),process.exit(1));const h=p.replace(/\.lua$/,".obfuscated.lua"),g=n.join(u,h);await s.pathExists(g)&&(await s.remove(y),await s.move(g,y,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}}await s.copy(n.join(e,"res"),n.join(a,"res")),await s.copy(n.join(e,"ui"),n.join(a,"ui"));for(const l of["logo.jpg","logo.png"]){const u=n.join(e,l);await s.pathExists(u)&&await s.copy(u,n.join(a,l))}const f=n.join(e,"dist"),P=n.join(e,"package.json"),S=n.join(a,"package.json"),b=await s.readJSON(P);delete b.scripts,delete b.devDependencies,delete b.dependencies,await s.writeJSON(S,b,{spaces:2}),await s.emptyDir(f);const j=n.join(f,"ms.zip"),J=n.join(f,"ms.msbundle");await R(a,j),await s.rename(j,J),await s.remove(a)};exports.buildAll=k;
1
+ "use strict";var x=Object.create;var L=Object.defineProperty;var N=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var $=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var C=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of q(e))!z.call(t,r)&&r!==n&&L(t,r,{get:()=>e[r],enumerable:!(i=N(e,r))||i.enumerable});return t};var W=(t,e,n)=>(n=t!=null?x($(t)):{},C(e||!t||!t.__esModule?L(n,"default",{value:t,enumerable:!0}):n,t));var K=exports&&exports.__createBinding||(Object.create?(function(t,e,n,i){i===void 0&&(i=n);var r=Object.getOwnPropertyDescriptor(e,n);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[n]}}),Object.defineProperty(t,i,r)}):(function(t,e,n,i){i===void 0&&(i=n),t[i]=e[n]})),A=exports&&exports.__setModuleDefault||(Object.create?(function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}):function(t,e){t.default=e}),O=exports&&exports.__importStar||(function(){var t=function(e){return t=Object.getOwnPropertyNames||function(n){var i=[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(i[i.length]=r);return i},t(e)};return function(e){if(e&&e.__esModule)return e;var n={};if(e!=null)for(var i=t(e),r=0;r<i.length;r++)i[r]!=="default"&&K(n,e,i[r]);return A(n,e),n}})(),M=exports&&exports.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.buildAll=void 0;const T=M(require("archiver")),D=require("child_process"),s=O(require("fs-extra")),F=O(require("os")),o=O(require("path")),B=require("./stopGuardPlugin"),G=require("./luaBundle"),E=require("./scriptProtect"),H=M(require("vite-plugin-bundle-obfuscator"));async function R(t,e){const n=(0,T.default)("zip",{zlib:{level:9}}),i=s.createWriteStream(e);return new Promise((r,c)=>{n.directory(t,!1).on("error",a=>c(a)).pipe(i),i.on("close",()=>r()),n.finalize()})}async function I(t,e){const n=[];async function i(r){const c=await s.readdir(r,{withFileTypes:!0});for(const a of c){const u=o.resolve(r,a.name);a.isDirectory()?await i(u):a.isFile()&&(/^main\.(js|ts)$/.test(a.name)||/_thread\.(js|ts)$/.test(a.name))&&n.push(o.relative(e,u))}}return await i(t),n}function k(){const t=[{cmd:o.join(F.homedir(),".KuaiJSDevloper","python","python.exe"),args:["--version"]},{cmd:o.join(F.homedir(),".KuaiJSDevloper","python","bin","python"),args:["--version"]},{cmd:"python",args:["--version"]},{cmd:"python3",args:["--version"]},{cmd:"python3.14",args:["--version"]}];for(const e of t)try{const n=(0,D.spawnSync)(e.cmd,e.args,{encoding:"utf8"}),i=(n.stdout||n.stderr||"").trim();if(i&&/Python\s+3\.14(\.\d+)?/i.test(i))return{ok:!0,path:e.cmd,version:i}}catch{}return{ok:!1}}async function ee(t){async function e(n){const i=await s.readdir(n,{withFileTypes:!0});for(const r of i){const c=o.join(n,r.name);if(r.isDirectory())if(r.name==="__pycache__"){const a=await s.readdir(c,{withFileTypes:!0});for(const u of a){const P=o.join(c,u.name);if(u.isFile()&&u.name.endsWith(".cpython-314.pyc")){const S=o.dirname(c),b=u.name.replace(/\.cpython-314\.pyc$/,".pyc"),g=o.join(S,b);await s.move(P,g,{overwrite:!0})}}try{await s.remove(c)}catch{}}else await e(c);else if(r.isFile())if(r.name.endsWith(".cpython-314.pyc")){const a=c.replace(".cpython-314.pyc",".pyc");await s.move(c,a,{overwrite:!0})}else r.name.endsWith(".py")&&await s.remove(c)}}await e(t)}const Q=["Minify","Weak","Medium","Strong"];async function U(t){const e=o.join(t,"obfuscator.json");if(!await s.pathExists(e))return{enabled:!0,preset:"Medium",bundle:!0};try{const n=await s.readJSON(e),i=n?.enabled!==!1,r=n?.bundle!==!1,c=V(n?.preset);return{enabled:i,preset:c,bundle:r}}catch(n){return console.error("\u274C \u65E0\u6CD5\u8BFB\u53D6 obfuscator.json"),console.error(n instanceof Error?n.message:String(n)),process.exit(1),{enabled:!0,preset:"Medium",bundle:!0}}}function V(t){if(typeof t!="string")return"Medium";const e=Q.find(n=>n.toLowerCase()===t.trim().toLowerCase());return e||(console.warn(`\u26A0\uFE0F obfuscator.json \u7684 preset \u65E0\u6548: ${t}\uFF0C\u5DF2\u6539\u7528 Medium`),"Medium")}function X(t){const e=o.resolve(__dirname,"..","..");return[o.join(e,"node_modules/@gamely/prometheus-cli/bin/cli.js"),o.join(e,"..","@gamely/prometheus-cli/bin/cli.js")].find(i=>s.pathExistsSync(i))}const Y=async(t=!0,e)=>{const n=o.join(e,"scripts"),i=await s.pathExists(o.join(n,"main.js"))||await s.pathExists(o.join(n,"main.ts")),r=await s.pathExists(o.join(n,"main.py")),c=await s.pathExists(o.join(n,"main.lua"));if(i){console.log("\u{1F680} \u5F00\u59CB\u6784\u5EFAJavaScript\u9879\u76EE...");const{build:d}=await import("vite"),l=o.join(e,"obfuscator.json");await s.pathExists(l)||(console.error("\u274C \u9519\u8BEF: \u5F53\u524D\u76EE\u5F55\u4E0D\u662F\u6709\u6548\u7684 \u5FEB\u70B9JS \u9879\u76EE"),console.error("\u8BF7\u786E\u4FDD\u76EE\u5F55\u5305\u542B\u4EE5\u4E0B\u6587\u4EF6:"),console.error(" - obfuscator.json"),process.exit(1));const j=await s.readJSON(l),m=j.scriptProtect===!0,{enabled:_,scriptProtect:y,...p}=j,f=o.join(e,t?"dist":"msbundle"),h=await I(n,n);await s.remove(f);const w=!t&&m?(0,E.createScriptProtectHelpers)():[];!t&&m&&console.log("\u{1F510} \u5DF2\u542F\u7528 JS \u539F\u751F\u4FDD\u62A4\uFF08scriptProtect=true\uFF09");for(const v of h)await d({root:e,build:{lib:{entry:{[o.basename(v,o.extname(v))]:`./scripts/${v}`},fileName:()=>v.replace(/\.ts$/,".js"),formats:["iife"],name:"KuaiJS"},outDir:t?"dist/scripts":"msbundle/scripts",emptyOutDir:!1,sourcemap:t,minify:!t,target:"safari15"},plugins:[(0,B.createStopGuardPlugin)(),...t?[]:[...m?[(0,E.createScriptProtectPlugin)(w)]:[],_?(0,H.default)({autoExcludeNodeModules:!0,threadPool:!0,options:{...p,target:"browser",debugProtection:!1,disableConsoleOutput:!1,domainLock:[],selfDefending:!1,renameGlobals:!1,renameProperties:!1,reservedNames:[...p.reservedNames||[],...w]}}):[],...m?[(0,E.createKjstEmbedPlugin)()]:[]]]})}if(t)return;const a=o.join(e,"msbundle");if(await s.ensureDir(a),(r||c)&&await s.copy(o.join(e,"scripts"),o.join(a,"scripts")),!r){if(c){const d=await U(e),l=o.join(a,"scripts");if(d.bundle?await(0,G.bundleLuaScripts)(l):console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u5355\u6587\u4EF6\u5408\u5E76\uFF08obfuscator.json bundle=false\uFF09"),!d.enabled)console.log("\u2139\uFE0F \u5DF2\u5173\u95ED Lua \u6DF7\u6DC6\uFF08obfuscator.json enabled=false\uFF09");else{const j=[],m=async y=>{const p=await s.readdir(y,{withFileTypes:!0});for(const f of p){const h=o.join(y,f.name);f.isDirectory()?await m(h):f.isFile()&&f.name.endsWith(".lua")&&j.push(h)}};await m(l);const _=X(e);_||(console.error("\u274C \u672A\u627E\u5230 @gamely/prometheus-cli\uFF0C\u65E0\u6CD5\u6DF7\u6DC6 Lua"),process.exit(1));for(const y of j){const p=o.relative(l,y);console.log(`\u{1F6E0}\uFE0F \u6DF7\u6DC6 Lua: ${p} (preset=${d.preset})`);const f=(0,D.spawnSync)(process.execPath,[_,p,"--preset",d.preset],{cwd:l,encoding:"utf8"});f.status!==0&&(console.error("\u274C \u6DF7\u6DC6 Lua \u5931\u8D25:",p),console.error(f.stderr||f.stdout||""),process.exit(1));const h=p.replace(/\.lua$/,".obfuscated.lua"),w=o.join(l,h);await s.pathExists(w)&&(await s.remove(y),await s.move(w,y,{overwrite:!0}))}console.log("\u2705 Lua \u6DF7\u6DC6\u5B8C\u6210")}}}await s.copy(o.join(e,"res"),o.join(a,"res")),await s.copy(o.join(e,"ui"),o.join(a,"ui"));for(const d of["logo.jpg","logo.png"]){const l=o.join(e,d);await s.pathExists(l)&&await s.copy(l,o.join(a,d))}const u=o.join(e,"dist"),P=o.join(e,"package.json"),S=o.join(a,"package.json"),b=await s.readJSON(P);delete b.scripts,delete b.devDependencies,delete b.dependencies,await s.writeJSON(S,b,{spaces:2}),await s.emptyDir(u);const g=o.join(u,"ms.zip"),J=o.join(u,"ms.msbundle");await R(a,g),await s.rename(g,J),await s.remove(a)};exports.buildAll=Y;
package/docs/api/ui.md CHANGED
@@ -119,6 +119,12 @@ ui.call("loadData", {
119
119
  });
120
120
  ```
121
121
 
122
+ ### 悬浮窗网页
123
+
124
+ 越狱包从悬浮图标打开的网页,文件名固定为项目里的 `ui/floatingWindow.html`。没有这个文件时悬浮网页打不开。主界面 `package.json` 的 `ui.tabs` 不决定这个页面。
125
+
126
+ 页面里用 `ms`。脚本用 `ui.callFloatingWindow`、`ui.evalFloatingWindow` 调用这个页面里 `registerUIFunc` 注册的函数。关闭、是否点空白关闭、窗口尺寸也写在这个页面里:`ms.closeWebWindow`、`ms.setWebWindowBlankClose`、`ms.setWebWindowSize`。
127
+
122
128
  ### callFloatingWindow - 调用越狱悬浮窗网页中的 JavaScript 函数
123
129
 
124
130
  ```typescript
@@ -474,6 +480,18 @@ ms.isTaskRunning()
474
480
 
475
481
  ### 配置管理方法
476
482
 
483
+ 网页里的配置方法和脚本 `config` 模块读写的是同一份配置。网页写进去,脚本用下表对应的方法就能读到;脚本写进去,网页再取也是这个值。
484
+
485
+ | 网页 | 脚本 |
486
+ | ---- | ---- |
487
+ | `ms.setConfig(key, value)` | `config.set(key, value)` |
488
+ | `ms.getConfig(key)` | `config.get(key)` |
489
+ | `ms.removeConfig(key)` | `config.remove(key)` |
490
+ | `ms.getAllConfig()` | `config.all()` |
491
+ | `ms.setAllConfig(config)` | `config.setAll(config)` |
492
+
493
+ 网页方法都返回 Promise。脚本方法直接返回结果。没有这个键时,网页 `ms.getConfig` 得到 `null`,脚本 `config.get` 得到 `undefined`。`ms.setAllConfig` 用传入对象替换整份配置,不在对象里的旧键会被清掉。
494
+
477
495
  #### setConfig - 设置配置项
478
496
 
479
497
  ```typescript
@@ -877,7 +895,7 @@ declare function setWebWindowBlankClose(allowed: boolean): Promise<boolean>;
877
895
 
878
896
  **说明:**
879
897
 
880
- 仅越狱包可用。每次打开默认不允许点空白关闭,由网页按钮调用 `closeWebWindow`。传 `true` 后,点窗口外遮罩会关闭网页窗口,不影响悬浮球和日志窗口。关掉再打开会回到不允许。免越狱包调用返回 `false`。
898
+ 仅越狱包可用。每次打开默认点空白就关闭网页窗口。传 `false` 后空白处不关,由网页按钮调用 `closeWebWindow`。不影响悬浮球和日志窗口。关掉再打开会回到允许。免越狱包调用返回 `false`。
881
899
 
882
900
  **网页端示例:**
883
901
 
package/docs/apicn/ui.md CHANGED
@@ -107,6 +107,12 @@ $视图.调用函数("loadData", {
107
107
  });
108
108
  ```
109
109
 
110
+ ### 悬浮窗网页
111
+
112
+ 越狱包从悬浮图标打开的网页,文件名固定为项目里的 `ui/floatingWindow.html`。没有这个文件时悬浮网页打不开。主界面 `package.json` 的 `ui.tabs` 不决定这个页面。
113
+
114
+ 页面里用 `ms`。脚本用 `$视图.调用悬浮窗函数`、`$视图.执行悬浮窗JS代码`(英文是 `ui.callFloatingWindow`、`ui.evalFloatingWindow`)调用这个页面里 `registerUIFunc` 注册的函数。关闭、是否点空白关闭、窗口尺寸也写在这个页面里:`ms.closeWebWindow`、`ms.setWebWindowBlankClose`、`ms.setWebWindowSize`。
115
+
110
116
  ### 调用悬浮窗函数 - 调用越狱悬浮窗网页中的 JavaScript 函数
111
117
 
112
118
  ```typescript
@@ -462,6 +468,18 @@ ms.isTaskRunning()
462
468
 
463
469
  ### 配置管理方法
464
470
 
471
+ 网页里的配置方法和脚本配置模块读写的是同一份配置。网页写进去,脚本用下表对应的方法就能读到;脚本写进去,网页再取也是这个值。
472
+
473
+ | 网页 | 脚本(英文 / 中文) |
474
+ | ---- | ------------------- |
475
+ | `ms.setConfig(key, value)` | `config.set` / `$配置.设置` |
476
+ | `ms.getConfig(key)` | `config.get` / `$配置.获取` |
477
+ | `ms.removeConfig(key)` | `config.remove` / `$配置.删除` |
478
+ | `ms.getAllConfig()` | `config.all` / `$配置.所有配置` |
479
+ | `ms.setAllConfig(config)` | `config.setAll` / `$配置.设置所有` |
480
+
481
+ 网页方法都返回 Promise。脚本方法直接返回结果。没有这个键时,网页 `ms.getConfig` 得到 `null`,脚本 `config.get` / `$配置.获取` 得到 `undefined`。`ms.setAllConfig` 用传入对象替换整份配置,不在对象里的旧键会被清掉。
482
+
465
483
  #### setConfig() - 设置配置项
466
484
 
467
485
  ```typescript
@@ -865,7 +883,7 @@ declare function setWebWindowBlankClose(allowed: boolean): Promise<boolean>;
865
883
 
866
884
  **说明:**
867
885
 
868
- 仅越狱包可用。每次打开默认不允许点空白关闭,由网页按钮调用 `closeWebWindow`。传 `true` 后,点窗口外遮罩会关闭网页窗口,不影响悬浮球和日志窗口。关掉再打开会回到不允许。免越狱包调用返回 `false`。
886
+ 仅越狱包可用。每次打开默认点空白就关闭网页窗口。传 `false` 后空白处不关,由网页按钮调用 `closeWebWindow`。不影响悬浮球和日志窗口。关掉再打开会回到允许。免越狱包调用返回 `false`。
869
887
 
870
888
  **网页端示例:**
871
889
 
package/docs/apilua/ui.md CHANGED
@@ -175,6 +175,12 @@ ui.call("loadData", {
175
175
  })
176
176
  ```
177
177
 
178
+ ### 悬浮窗网页
179
+
180
+ 越狱包从悬浮图标打开的网页,文件名固定为项目里的 `ui/floatingWindow.html`。没有这个文件时悬浮网页打不开。主界面 `package.json` 的 `ui.tabs` 不决定这个页面。
181
+
182
+ 页面里用 `ms`。脚本用 `ui.callFloatingWindow`、`ui.evalFloatingWindow` 调用这个页面里 `registerUIFunc` 注册的函数。关闭、是否点空白关闭、窗口尺寸也写在这个页面里:`ms.closeWebWindow`、`ms.setWebWindowBlankClose`、`ms.setWebWindowSize`。
183
+
178
184
  ### callFloatingWindow - 调用越狱悬浮窗网页中的 JavaScript 函数
179
185
 
180
186
  ```lua
@@ -515,6 +521,18 @@ ms.isTaskRunning()
515
521
 
516
522
  ### 配置管理方法
517
523
 
524
+ 网页里的配置方法和脚本 `config` 模块读写的是同一份配置。网页写进去,脚本用下表对应的方法就能读到;脚本写进去,网页再取也是这个值。
525
+
526
+ | 网页 | 脚本 |
527
+ | ---- | ---- |
528
+ | `ms.setConfig(key, value)` | `config.set(key, value)` |
529
+ | `ms.getConfig(key)` | `config.get(key)` |
530
+ | `ms.removeConfig(key)` | `config.remove(key)` |
531
+ | `ms.getAllConfig()` | `config.all()` |
532
+ | `ms.setAllConfig(config)` | `config.setAll(config)` |
533
+
534
+ 网页方法都返回 Promise。脚本方法直接返回结果。没有这个键时,网页 `ms.getConfig` 得到 `null`,脚本 `config.get` 得到 `nil`。`ms.setAllConfig` 用传入对象替换整份配置,不在对象里的旧键会被清掉。
535
+
518
536
  #### setConfig - 设置配置项
519
537
 
520
538
  ```typescript
@@ -918,7 +936,7 @@ declare function setWebWindowBlankClose(allowed: boolean): Promise<boolean>;
918
936
 
919
937
  **说明:**
920
938
 
921
- 仅越狱包可用。每次打开默认不允许点空白关闭,由网页按钮调用 `closeWebWindow`。传 `true` 后,点窗口外遮罩会关闭网页窗口,不影响悬浮球和日志窗口。关掉再打开会回到不允许。免越狱包调用返回 `false`。
939
+ 仅越狱包可用。每次打开默认点空白就关闭网页窗口。传 `false` 后空白处不关,由网页按钮调用 `closeWebWindow`。不影响悬浮球和日志窗口。关掉再打开会回到允许。免越狱包调用返回 `false`。
922
940
 
923
941
  **网页端示例:**
924
942
 
@@ -125,6 +125,12 @@ ui.call("loadData", {
125
125
  })
126
126
  ```
127
127
 
128
+ ### 悬浮窗网页
129
+
130
+ 越狱包从悬浮图标打开的网页,文件名固定为项目里的 `ui/floatingWindow.html`。没有这个文件时悬浮网页打不开。主界面 `package.json` 的 `ui.tabs` 不决定这个页面。
131
+
132
+ 页面里用 `ms`。脚本用 `ui.callFloatingWindow`、`ui.evalFloatingWindow` 调用这个页面里 `registerUIFunc` 注册的函数。关闭、是否点空白关闭、窗口尺寸也写在这个页面里:`ms.closeWebWindow`、`ms.setWebWindowBlankClose`、`ms.setWebWindowSize`。
133
+
128
134
  ### callFloatingWindow - 调用越狱悬浮窗网页中的 JavaScript 函数
129
135
 
130
136
  ```python
@@ -491,6 +497,18 @@ ms.isTaskRunning()
491
497
 
492
498
  ### 配置管理方法
493
499
 
500
+ 网页里的配置方法和脚本 `config` 模块读写的是同一份配置。网页写进去,脚本用下表对应的方法就能读到;脚本写进去,网页再取也是这个值。
501
+
502
+ | 网页 | 脚本 |
503
+ | ---- | ---- |
504
+ | `ms.setConfig(key, value)` | `config.set(key, value)` |
505
+ | `ms.getConfig(key)` | `config.get(key)` |
506
+ | `ms.removeConfig(key)` | `config.remove(key)` |
507
+ | `ms.getAllConfig()` | `config.all()` |
508
+ | `ms.setAllConfig(config)` | `config.setAll(config)` |
509
+
510
+ 网页方法都返回 Promise。脚本方法直接返回结果。没有这个键时,网页 `ms.getConfig` 得到 `null`,脚本 `config.get` 得到 `None`。`ms.setAllConfig` 用传入对象替换整份配置,不在对象里的旧键会被清掉。
511
+
494
512
  #### setConfig - 设置配置项
495
513
 
496
514
  ```typescript
@@ -869,7 +887,7 @@ declare function setWebWindowBlankClose(allowed: boolean): Promise<boolean>;
869
887
 
870
888
  **说明:**
871
889
 
872
- 仅越狱包可用。每次打开默认不允许点空白关闭,由网页按钮调用 `closeWebWindow`。传 `true` 后,点窗口外遮罩会关闭网页窗口,不影响悬浮球和日志窗口。关掉再打开会回到不允许。免越狱包调用返回 `false`。
890
+ 仅越狱包可用。每次打开默认点空白就关闭网页窗口。传 `false` 后空白处不关,由网页按钮调用 `closeWebWindow`。不影响悬浮球和日志窗口。关掉再打开会回到允许。免越狱包调用返回 `false`。
873
891
 
874
892
  **网页端示例:**
875
893
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ms-vite-plugin",
3
- "version": "1.5.15",
3
+ "version": "1.5.17",
4
4
  "type": "commonjs",
5
5
  "license": "MIT",
6
6
  "publishConfig": {