跳到主要内容

独立网页脚本宿主

网页脚本控制台使用可复用的 MapScriptHost 和 ScriptRunner,无需 Nuxt 或桌面应用源码。宿主提供地图操作;编辑器、运行按钮、确认界面和来源标注由使用方编写。WebScriptHost 保留为兼容名称。

当前是 0.1.0-dev.08.15a 私有开发快照,匹配核心 65d76a28、脚本契约 0.5-session。尚未正式发布独立 npm 包;分发清单 和 宿主输入快照 记录实际版本与校验值。生产部署后从本站取得附件;本机构建应使用本机预览地址。

打开完整 HTML 示例。保存时把清单中的 dist、wasm、script、host 和 HTML 放在同一目录,通过 HTTP 提供。相对依赖和两套 Worker/WASM 必须保留,不能只复制入口 JS。无需在线底图即可运行示例的蓝色点;接入底图后按图源要求显示来源与版权。

import {MapView} from './dist/index.js';
import {MapScriptHost} from './host/dist/index.js';
import {ScriptRunner} from './script/dist/index.js';
const view = await MapView.create(container, {worker:false, locale:'auto'});
const host = new MapScriptHost(view, async preview =>
  confirm(preview.title + '\n' + preview.summary));
const runner = new ScriptRunner(host);
const value = await runner.run(source);

HTML 还要包含以下映射;完整示例已包含 CSS、输入框、运行/停止按钮及所有点击处理。

<script type="importmap">{"imports":{"@sqsmap/script":"./script/dist/index.js"}}</script>

脚本声明版本和权限,例如 // @gis-api 0.5-session 与 // @permissions ["project.read", "map.write"]。脚本内从 sqsmap 导入 map;宿主程序中的 MapView 是另一层接口。共享写入可链式调用,权威查询和 map.sqs.flush 需 await。共同地球仪使用 map.setProjection({type:"globe"}),无需切换到 gis 模块;球面图层和相机范围见地球仪 API。旧 gis 扩展仍保留兼容。

会话和清理

runner.run 在初始化完成后返回结果;持续脚本此时仍运行。通过 export const sessionMode = 'persistent' 开启持续事件会话,runner.closed 表示实际退出。停止返回的关闭结果可能包含 CANCELLED,不会产生未处理的拒绝。

重复运行或切换示例先执行 runner.stop(); await runner.closed; await host.reset();。重置会移除宿主确认创建的图层/图源并切回平面;脚本正常结束本身会保留地图显示。活动会话中的重置以 CONFLICT 拒绝,清理失败明确报错。地图销毁调用 view.destroy()。

成功重置创建新的宿主命令与事件身份域,旧回执/事件序号不得用于新会话。地图 SDK 的历史和实例保持,SDK 水位与脚本宿主水位不能混用。失败后需要继续的脚本应先观察错误并用该错误携带的 submittedSequence 确认已观察失败;完整检查展示了此行为。

执行器与支持范围

浏览器在原生 JavaScript Worker 中执行代码,契约 WASM 负责语法/接口协议;原生动态库可选模块内置 QuickJS。浏览器脚本不是 QuickJS,也不能访问网页 DOM。地图渲染可以另用 Worker;worker:true 允许回退,指定 createWorker 并检查 view.offscreen 可验证严格渲染 Worker。

相同的七份图源、图层、事件、查询和要素状态脚本已原样在真实浏览器链路及 Linux 原生库运行。原生一次性入口当前明确拒绝图源/图层事件监听;这些脚本应改用持续会话入口,不能捕获错误后假装已监听。浏览器一次性入口可执行这两份短监听脚本。移动宿主及外机验收仍未完成。

运行器声明 · 宿主声明 · 脚本类型 · 脚本 WASM 第三方声明 · SDK 许可。保存类型文件时保留清单中的相对依赖;正式包许可与发行按后续发行记录确认。

共同光照、太阳扩展与历史事件使用相同脚本形状;各平台的三维图层支持仍以能力查询为准。

旧 gis.map.setProjection 也从宿主已确认的水位开始等待,已处理的旧 SDK 错误不会在随后切换地球仪时重新报错;新的投影错误仍会拒绝。