当前位置: 首页 > news >正文

开源项目WPS AI插件察元AI文档助手:从 Ribbon 加载到 AI 对话框 URL 拼装

摘要

OnAddinLoad 在加载项生命周期早期注册 ApiEvent、恢复模型索引并异步 loadModelList。openAIAssistantDialog 使用 Util.GetUrlPath 与 GetRouterHash 拼接 SPA 地址,是与 WPS ShowDialog 强耦合的关键路径。

关键词

OnAddinLoad;ShowDialog;ribbon

扩展阅读与维护提示

本篇围绕「从 Ribbon 加载到 AI 对话框 URL 拼装」组织材料。仓库内与主题最直接相关的检索词包括:OnAddinLoad、ShowDialog、ribbon。建议在阅读正文所列片段后,用 IDE 全局搜索这些符号,沿 import 与调用栈向上追问「谁在什么时机调用」,而不是只记住单文件路径。

摘要所概括的要点为:OnAddinLoad 在加载项生命周期早期注册 ApiEvent、恢复模型索引并异步 loadModelList。openAIAssistantDialog 使用 Util.GetUrlPath 与 GetRouterHash 拼接 SPA 地址,是与 WPS ShowDialog 强耦合的关键路径。落地到排障时,可把现象粗分为三类交叉验证:配置是否按预期写入持久化介质;WPS COM 上下文是否可用(例如是否缺少 ActiveDocument);以及网络与证书策略是否拦截了 fetch。本篇涉及的模块通常只覆盖其中一两类,需要与相邻篇目拼成完整拼图。

教程文件名「12-yuanma-fenceng-yu-AI-bianma-zai-ben-xiangmu.md」仅用于导航与排序,不等价于源码模块名。若正文中的行号与本地分支不一致,多半因合并导致行偏移,此时应以函数名、导出名为锚重新检索;团队若维护了生成脚本,可在变更大段源码后重新运行以保持摘录大致对齐。

本文刻意避免对产品能力做营销式承诺:所述行为均以当前仓库可见实现为准。若组织策略要求离线或内网模型,应在网关、证书与代理层收口,而不是假设加载项能绕过浏览器安全模型。

若你同时阅读 docs/chayuan-llm-chain-series,可先对照其中的总体链路图理解「请求从 UI 到 chatApi」的次序,再回到本教程看数据结构、默认值与修改风险面;两者互补,不重复堆砌功能列表。

正文

1. 启动钩子

枚举注入、PluginStorage 标记位、文档事件监听均在此处完成。

阅读源码摘录时,请把它当作「定位入口」而非完整实现:同一函数可能在其他分支还有早退条件或 try/catch。修改默认行为前,建议用最小文档手工走一遍相关助手或对话框,并观察任务清单与日志中的字段是否与预期一致,再决定是否做数据迁移或配置重置。

// src/components/ribbon.js 第51-93行//这个函数在整个wps加载项中是第一个执行的functionOnAddinLoad(ribbonUI){if(typeofwindow.Application.ribbonUI!='object'){window.Application.ribbonUI=ribbonUI}if(typeofwindow.Application.Enum!='object'){// 如果没有内置枚举值window.Application.Enum=Util.WPS_Enum}//这几个导出函数是给外部业务系统调用的window.openOfficeFileFromSystemDemo=SystemDemo.openOfficeFileFromSystemDemo window.InvokeFromSystemDemo=SystemDemo.InvokeFromSystemDemo window.Application.PluginStorage.setItem('EnableFlag',false)//往PluginStorage中设置一个标记,用于控制两个按钮的置灰window.Application.PluginStorage.setItem('ApiEventFlag',false)//往PluginStorage中设置一个标记,用于控制ApiEvent的按钮label// 文档打开或切换时刷新表单模式按钮状态(从文档变量/保护类型读取)try{if(window.Application.ApiEvent){window.Application.ApiEvent.AddApiEventListener('DocumentOpen','ribbon.OnDocumentOpenForFormMode')window.Application.ApiEvent.AddApiEventListener('WindowActivate','ribbon.OnWindowActivateForFormMode')window.Application.ApiEvent.AddApiEventListener('DocumentBeforeSave','ribbon.OnDocumentBeforeSave')}}catch(e){console.warn('注册文档事件失败:',e)}// 先设置默认模型列表,确保有数据显示setDefaultModels()// 从存储恢复选中的模型索引;无有效选中时默认选中 OpenAIconststoredIndex=window.Application.PluginStorage.getItem('selectedModelIndex')if(storedIndex!==undefined&&storedIndex!==null){constidx=parseInt(storedIndex,10)if(!isNaN(idx))selectedModelIndex=idx}else{selectedModelIndex=getOpenAIModelIndex(getModelList())}// 然后尝试从接口加载(异步)loadModelList()returntrue

2. AI 助手 URL

ShowDialog 第一个参数必须是可加载的完整 URL,含 hash 与路由段。

阅读源码摘录时,请把它当作「定位入口」而非完整实现:同一函数可能在其他分支还有早退条件或 try/catch。修改默认行为前,建议用最小文档手工走一遍相关助手或对话框,并观察任务清单与日志中的字段是否与预期一致,再决定是否做数据迁移或配置重置。

// src/components/ribbon.js 第96-105行functionopenAIAssistantDialog(query={}){constqueryString=newURLSearchParams(query).toString()constaiUrl=Util.GetUrlPath()+Util.GetRouterHash()+`/ai-assistant${queryString?`?${queryString}`:''}`window.Application.ShowDialog(aiUrl,'察元 AI 助手',900*(window.devicePixelRatio||1),700*(window.devicePixelRatio||1),false)
http://www.jsqmd.com/news/1079348/

相关文章:

  • 2026年,400电话源头厂家哪个值得选?
  • 6月24日RoboScience发布通用具身大模型,具身智能破局泛化难题有新招!
  • Spring Boot + MyBatis 多模块项目中,如何优雅完成一个增量需求
  • 运维转大模型:把学习路线变成作品集
  • 大模型聚合 API 全网测速实测:延迟瓶颈拆解与商用平台落地对比
  • 统计短视频东方美学穿搭播放数据,算法计算国风内容传播流量增益值。
  • 3分钟掌握WinAsar:Windows平台最轻量asar文件管理工具终极指南
  • 2026全栈信创选型深度指南:AI Agent兼容国产芯片的架构博弈与提效实战
  • 【计算机毕业设计案例】基于 SpringBoot 的高校学术活动管理与交流平台设计与实现基于 Java 与 SpringBoot 的高校学术交流平台设计与实现(程序+文档+讲解+定制)
  • 【极速入门数模电路】双稳态/单稳态/无稳态电路
  • 小模型不一定要从头练!普林斯顿研究:预算有限剪枝完胜,但真正的优势藏在稀疏里
  • 微软推出两大开发工具:Coreutils 统一命令体验,Dev Config 快速配置开发环境
  • 2026年梳子选购指南:这5个品牌专业度实测揭晓
  • 高防IP一个月6500还只是起步?聊聊小团队能用的DDoS防护方案
  • 5分钟掌握ncmdump:终极网易云音乐NCM格式解密转换指南
  • Python的__enter__中的处理事务
  • Prime Day来袭!ZDNET编辑精选90多款优惠,7款iPhone小工具超值折扣
  • 2026 AI/LLM黑话速通:Prefill、RLVR、GraphRAG,进阶概念怎么用?从小白到听懂面试官在说什么(下)
  • 构建企业级Java接口测试框架:从契约驱动到CI/CD集成
  • TSMaster 双月硬核迭代!4月新增音视频追踪,5月引入Codex Skills,SOME/IP精控再升级
  • 告别繁琐邮件客户端:如何用Roundcube Mail打造个人专属网页邮箱系统
  • 移动应用逆向工程与Hook实战:从原理到wxhelper工具实现
  • 浦东新区新高一语文补课班学习技巧:文言积累、现代文提升测评
  • 做工控品质7年掏心窝分享:选串口屏别乱踩坑
  • 推荐题目:洛谷 P1049 [NOIP 2001 普及组] 装箱问题
  • 天津GEO代理公司口碑排行 高好评服务商盘点
  • 智能钢琴指法生成器:如何用动态规划算法优化演奏体验
  • WindowResizer终极指南:如何轻松掌控任意窗口尺寸的完整教程
  • Go+Selenium构建企业级测试框架:架构设计与实战优化
  • 免费虚拟桌面伴侣:5个功能让你打造独一无二的二次元伙伴