收藏
回答

微信小程序可否支持通过 XPath 获取 DOM 元素?

背景:

我们这边在做自动化埋点,构想了两步实现:

(1)前端同学在小程序工具中选择元素,获取到 XPath (如`/page/view/view[1]/view[2]/view[1]/view[2]/view/view/view[2]/view[2]/view[2]/text[1]`)后,然后在公司内部埋点系统中,登记下这个元素需要上报点击事件,这样线上埋点配置文件里就有这条记录了(伪代码如下):

{
  ele: '/page/view/view[1]/view[2]/view[1]/view[2]/view/view/view[2]/view[2]/view[2]/text[1]',
  trackType: 'click'
}

(2)线上环境,如果用户点击了某一个元素,前端代码会根据这个元素的 XPath,判断其点击事件 是否登记在在第(1)步的埋点配置中,如果有则上报埋点。

但是现在第(2)步,需要微信小程序支持 “根据 XPath 获取 DOM 元素” / “根据点击事件回调中得到的 DOM 元素获取 XPath”,所以请问下微信是否考虑支持。

最后一次编辑于  2021-02-23
回答关注问题邀请回答
收藏

5 个回答

  • October
    October
    2022-07-23

    楼主现在用的什么方式,能否交流下

    2022-07-23
    有用
    回复
  • 朝阳
    朝阳
    2021-02-22

    通过事件冒泡处理不行吗

    2021-02-22
    有用
    回复 2
    • 燕归来
      燕归来
      发表于移动端
      2021-02-22
      冒泡自己逐层遍历构造 XPath 是吧,理论上也可以 但是如果有一层业务迭代中阻止冒泡了 这个元素的自动埋点就失效了
      2021-02-22
      回复
    • 朝阳
      朝阳
      2021-02-22回复燕归来
      那就尽量不要处理冒泡,或者自己实现一个dispath
      2021-02-22
      回复
  • 面条君
    面条君
    2021-02-22

    与元素关联一定要用xPath?随便在元素上弄个dataset标记一下不就好了?

    2021-02-22
    有用
    回复 10
    • 燕归来
      燕归来
      2021-02-22
      用 xPath 可以免上线(如上第二步是拦截 Component 点击事件 判断是否需要埋点,然后第一步如果要增加一个元素点击埋点,只需要更新线上配置文件就行了,小程序不需要重新打包代码上线),dataset 应该是需要提前内置 dataset 属性的
      2021-02-22
      回复
    • 面条君
      面条君
      2021-02-22回复燕归来
      估计不行,xpath这个好像在代码中无法获取
      2021-02-22
      回复
    • 燕归来
      燕归来
      发表于移动端
      2021-02-22回复面条君
      嗯嗯 确实没找到办法,所以社区提问看官方是否考虑提供了
      2021-02-22
      回复
    • 面条君
      面条君
      2021-02-22回复燕归来
      你可以考虑下楼下老哥的方法,识别方法名,根据这个来进行匹配打点
      2021-02-22
      回复
    • 燕归来
      燕归来
      2021-02-22回复面条君
      不知道我是不是没理解对,我这边运行时是拿不到函数名的
      2021-02-22
      回复
    查看更多(5)
  • 阿北
    阿北
    2021-02-22

    我们当时做自动化埋点的时候没做的和web一样接入xpath,直接利用获取方法名和注释来判断操作路径

    2021-02-22
    有用
    回复 4
    • 燕归来
      燕归来
      2021-02-22
      soga,这是 ast 语法分析么,如果需要增加一些元素的埋点可以免上线么?
      2021-02-22
      回复
    • 阿北
      阿北
      2021-02-23回复燕归来
      我们的确是利用ast语法分析,分析出页面名、方法名和方法对应的注释,配合miniprogram-ci,每次发版时会自动生成埋点文档
      2021-02-23
      回复
    • 燕归来
      燕归来
      2021-02-23回复阿北
      哦哦理解了,谢谢老哥
      2021-02-23
      回复
    • 燕归来
      燕归来
      2021-02-24回复燕归来
      这种方式试了一下,原生小程序项目还行,但 Taro 项目不好做(都是 react 组件和内部方法,很容易 rename 等造成 ast 解析出来路径变化)
      2021-02-24
      回复
  • 耿霄
    耿霄
    2021-02-22

    +1

    2021-02-22
    有用
    回复
登录 后发表内容
问题标签