Skip to content

主题/插件相关 API 文档

nodeInfo

用途:获取当前节点的信息,包括节点名称、标签、图标等。

使用示例

ts
const nodeInfo = freelogApp.nodeInfo;
console.log(nodeInfo);

返回字段说明

字段类型说明
nodeNamestring节点名称
tagsarray标签数组
nodeLogostring节点图标
nodeTitlestring节点标题
nodeShortDescriptionstring节点简介
ownerUserNamestring节点拥有者

返回示例

json
{
  "nodeName": "示例节点",
  "tags": ["开发", "测试"],
  "nodeLogo": "https://cdn.freelog.com/logo.png",
  "nodeTitle": "示例节点标题",
  "nodeShortDescription": "这是一个节点简介。"
}

getCurrentUrl

用途:获取当前节点的完整 URL;可选传入path参数,获取当前主题插件指定自身路由路径的 URL。

参数说明

参数类型必填说明
pathstring可选当前主题或插件想要指定的路由路径。

使用示例

ts
// 获取当前节点的完整 URL,并修改当前主题插件的路由为 /myroute?a=1&b=2
const url = freelogApp.getCurrentUrl("/myroute?a=1&b=2");
console.log(url);

getSelfWidgetRenderName

用途:获取插件自身的渲染名称,通常用于单独调试插件时使用(如 dev 模式)。

使用示例

ts
const renderName = freelogApp.getSelfWidgetRenderName();
console.log(renderName);

getTopExhibitId

用途:获取依赖树的根 id。

使用场景

  • 场景 1:当前应用是展品,获取的是自身的展品 ID。
  • 场景 2:当前应用是插件, 获取的是依赖树中的根 ID(主题 ID)。

使用示例

ts
const topExhibitId = freelogApp.getTopExhibitId();
console.log(topExhibitId);

getSelfNid

用途:获取当前插件在依赖树中的 ID(即 nid)。

使用示例

ts
const articleNid = freelogApp.getSelfNid();
const exhibitId = await freelogApp.getTopExhibitId();

const res = await freelogApp.getExhibitDepInfo(exhibitId, {
  articleNids: articleNid,
});
console.log(res);

getSelfDepForTheme

用途:获取主题自身的依赖列表,通过 parentId 与 nid 自行转换树结构。

使用示例

ts
// 这里不需要await,运行时直接提供主题的依赖列表和属性,如需实时数据请使用 getSelfDep
const dependencyTree = freelogApp.getSelfDepForTheme();
console.log(dependencyTree);

getSelfDep

用途:实时获取主题或插件自身的依赖列表,通过 parentId 与 nid 自行转换树结构。

使用示例

ts
const dependencyTree = await freelogApp.getSelfDep();
console.log(dependencyTree);

返回字段说明

字段类型说明
nidstring依赖 ID
articleIdstring作品 ID
articleNamestring作品名称
articleTypenumber作品类型(1:独立资源等)
versionstring版本号
resourceTypestring[]资源类型
deepnumber依赖的层级
parentNidstring父级依赖 ID

getSelfPropertyForTheme

用途:获取主题的自身的属性。(配置页: 节点管理 > 主题管理 > 编辑 > 更多设置 > 可选配置)

使用示例

ts
// 这里不需要await,运行时直接提供主题的属性,如需实时数据请使用 getSelfProperty
const property = freelogApp.getSelfPropertyForTheme();
console.log(property);

getSelfProperty

用途:实时获取主题、插件自身的属性。

使用示例

ts
// 实时
const property = await freelogApp.getSelfProperty();
console.log(property);

mountExhibitWidget

用途:加载展品插件。

参数说明

参数类型必填说明
exhibitIdstring展品 ID
containerHTMLElement挂载容器
propertyobject展品或作品的属性
dependencyTreeobject[]依赖树
renderWidgetOptionsobject渲染选项(如数据传递等)
seqnumber挂载的序号,加载多次相同插件时必须填写,以保证唯一性
widget_entrystring开发模式下,本地调试地址

renderWidgetOptions 说明

点击展开/折叠内容
ts
interface RenderWidgetOptions {
  /**
   *  是否切换为iframe沙箱,可选
   */
  iframe?: boolean;
  /**
   * 开启内联模式运行js,可选
   */
  inline?: boolean;
  /**
   * 关闭虚拟路由系统,可选
   */
  "disable-memory-router"?: boolean;
  /**
   * 指定默认渲染的页面,可选
   */
  "default-page"?: string;
  /**
   * 保留路由状态,可选
   */
  "keep-router-state"?: boolean;
  /**
   * 关闭子插件请求的自动补全功能,可选
   */
  "disable-patch-request"?: boolean;
  /**
   * 开启keep-alive模式,可选
   */
  "keep-alive"?: boolean;
  /**
   * 卸载时强制删除缓存资源,可选
   */
  destroy?: boolean;
  /**
   * 开启fiber模式,可选
   */
  fiber?: boolean;
  /**
   * 设置子插件的基础路由,可选
   */
  baseroute?: string;
  /**
   * 开启ssr模式,可选
   */
  ssr?: boolean;
  // shadowDOM?: boolean, // 开启shadowDOM,可选
  /**
   * 传递给子插件的数据,可选
   */
  data?: Object;
  /**
   * 获取子插件发送数据的监听函数,可选
   */
  onDataChange?: Function;
  /**
   * 注册子插件的生命周期
   */
  lifeCycles?: {
    /**
     * 加载资源前触发
     */
    created?(e: CustomEvent): void;
    /**
     * 加载资源完成后,开始渲染之前触发
     */
    beforemount?(e: CustomEvent): void;
    /**
     * 子插件渲染结束后触发
     */
    mounted?(e: CustomEvent): void;
    /**
     * 子插件卸载时触发
     */
    unmount?(e: CustomEvent): void;
    /**
     * 子插件渲染出错时触发
     */
    error?(e: CustomEvent): void;
    /**
     * 子插件推入前台之前触发(keep-alive模式特有)
     */
    beforeshow?(e: CustomEvent): void;
    /**
     * 子插件推入前台之后触发(keep-alive模式特有)
     */
    aftershow?(e: CustomEvent): void;
    /**
     * 子插件推入后台时触发(keep-alive模式特有)
     */
    afterhidden?(e: CustomEvent): void;
  };
}

使用示例

ts
const widgetController = await freelogApp.mountExhibitWidget({
  exhibitId: "exampleId",
  container: document.getElementById("app"),
  renderWidgetOptions: {
    data: { message: "Hello World" },
  },
});

console.log(widgetController);

返回对象 widgetController 说明

点击展开/折叠内容
ts
interface WidgetController {
  /**
   * 子插件是否成功加载
   */
  success: boolean;
  /**
   * 子插件渲染id  widgetRenderName
   */
  name: string;
  /**
   * 卸载插件
   */
  unmount: (options?: unmountAppParams) => Promise<boolean>;
  /**
   *  @param destroy 重新渲染时是否彻底删除缓存值,可选
   */
  reload: (destroy?: boolean) => Promise<boolean>;
  /**
   * 获取子插件数据
   */
  getData: () => any;
  /**
   * 清除发送给子插件的数据
   */
  clearData: () => any;
  /**
   * 发送数据给子插件,子插件通过 widgetApi.addDataListener 监听获取
   */
  setData: (data: Record<PropertyKey, unknown>) => any;
  /**
   * 方法拥有和 setData 一样的参数和行为,唯一不同的是 forceSetData 会强制发送数据,无论数据是否变化
   */
  forceSetData: (data: Record<PropertyKey, unknown>) => any;
  /**
   * 监听子插件dipatch过来的数据
   * @param dataListener 监听函数
   * @param autoTrigger 是否立刻触发一次监听函数,默认值为 false
   */
  addDataListener: (dataListener: Function, autoTrigger?: boolean) => any;
  /**
   * 解绑监听函数
   * @param dataListener 监听函数
   */
  removeDataListener: (dataListener: Function) => any;
  /**
   * 清空所有绑定的监听函数
   */
  clearDataListener: () => any;
}

mountArticleWidget

用途:加载作品插件,必须是主题或展品的依赖。

参数说明

参数类型必填说明
articleIdstring作品 ID
containerHTMLElement挂载容器
parentNidstring依赖树中的父 id,  可通过getSelfDependencyTree 获取
nidstring依赖树中自已 id,  可通过getSelfDependencyTree 获取
topExhibitIdstring展品 id,  可通过getTopExhibitId获取
propertyobject展品或作品的属性
dependencyTreeobject[]依赖树
renderWidgetOptionsobject渲染选项(参考 mountExhibitWidget 的 renderWidgetOptions 说明)
seqnumber挂载的序号,加载多次相同插件时必须填写,以保证唯一性
widget_entrystring开发模式下,本地调试地址

renderWidgetOptions 说明

参考 mountExhibitWidget

使用示例

ts
const widgetController = await freelogApp.mountExhibitWidget({
  exhibitId: "exampleId",
  container: document.getElementById("app"),
  renderWidgetOptions: {
    data: { message: "Hello World" },
  },
});

### 返回对象 widgetController 说明

[参考 mountExhibitWidget](#mountexhibitwidget)

console.log(widgetController);

reload

用途:重载整个网页(仅限主题可用)。

使用示例

ts
freelogApp.reload();

setViewport

用途:设置 viewport 的 meta 信息(仅主题可用)。

使用示例

ts
freelogApp.setViewport({
  width: "device-width",
  "initial-scale": 1,
  "maximum-scale": 1,
  "user-scalable": "no",
});

getStaticPath

用途:获取指定静态资源(如图片、字体等)的正确路径。

参数说明

参数类型必填说明
pathstring/ 开头的路径。

使用示例

ts
const path = freelogApp.getStaticPath("/assets/image.png");
console.log(path);

总结

通过以上 API,开发者可以高效地管理 Freelog 插件,包括获取静态资源、节点信息、自身依赖以及插件挂载等功能,满足不同场景的开发需求。