Skip to content

feat: add page renderer detection tool#16

Open
Darley-Wey wants to merge 2 commits into
yfmeii:mainfrom
Darley-Wey:page_getRenderer
Open

feat: add page renderer detection tool#16
Darley-Wey wants to merge 2 commits into
yfmeii:mainfrom
Darley-Wey:page_getRenderer

Conversation

@Darley-Wey
Copy link
Copy Markdown
Contributor

Summary

  • add page_getRenderer to report the current renderer as webview or skyline
  • include raw wx.getSkylineInfoSync() output for diagnostics
  • clarify component selector guidance for bounding client rect lookup

Validation

  • npm run build

Copilot AI review requested due to automatic review settings May 19, 2026 17:35
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a new Page tool to detect the current Mini Program renderer (WebView vs Skyline) and refines the guidance shown to users for cross-component bounding client rect queries.

Changes:

  • Add page_getRenderer tool that calls wx.getSkylineInfoSync() and returns the inferred renderer plus raw diagnostics.
  • Register the new tool in the Page tools list.
  • Update element_getBoundingClientRect description to clarify how selector/innerSelector should be used with custom components.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
src/tools/page.ts Adds and registers page_getRenderer renderer-detection tool and outputs diagnostics.
src/tools/element.ts Updates tool description text to clarify selector behavior across custom components.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/tools/page.ts
Comment on lines +389 to +393
skylineInfo = await miniProgram.callWxMethod("getSkylineInfoSync");
} catch (error) {
const message = error instanceof Error ? error.message : String(error);
throw new UserError(`调用 wx.getSkylineInfoSync() 失败: ${message}`);
}
@yfmeii
Copy link
Copy Markdown
Owner

yfmeii commented May 21, 2026

感谢贡献!这里我建议调整一下实现方向:不新增 page_getRenderer 工具,而是把渲染器信息合并到现有的 mp_currentPage 返回结果里。

原因有两个:

  1. wx.getSkylineInfoSync().isSupported 表示的是“当前运行环境是否支持 Skyline”,不是“当前页面是否正在使用 Skyline 渲染”。在支持 Skyline 的 WebView 页面上,当前实现会误判为 skyline
  2. 渲染器信息本质上属于当前页面信息,放在 mp_currentPage 更合适,也能避免新增工具带来额外上下文占用。

我这边实测到一个反例:

{
  "renderer": "webview",
  "skylineInfo": {
    "isSupported": true,
    "version": "1.4.7"
  }
}

建议改法:

  • 移除新增的 page_getRenderer 工具
  • mp_currentPage 返回结果中增加:
    • renderer: 当前页面实例的渲染器,例如 webview / skyline
    • skylineInfo: wx.getSkylineInfoSync() 的原始诊断信息

renderer 建议通过当前页面实例读取,而不是从 skylineInfo.isSupported 推断,例如:

const runtimeInfo = await miniProgram.evaluate(() => {
  const pages = getCurrentPages();
  const page = pages[pages.length - 1];

  return {
    renderer: page?.renderer ?? null,
    skylineInfo:
      typeof wx.getSkylineInfoSync === "function"
        ? wx.getSkylineInfoSync()
        : null,
  };
});

这样 mp_currentPage 就能同时告诉调用方当前页面路径、query、尺寸、滚动位置和真实 renderer,也不需要额外增加一个工具。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants