# navigator

> 基础库 1.0.0 开始支持，低版本需做[兼容处理](1003706)。

> __小程序插件__：支持，需要小程序基础库版本不低于 [2.1.0](1003706)
> 
> __微信 Windows 版__：支持
> 
> __微信 Mac 版__：支持
> 
> __微信 鸿蒙 OS 版__：支持

渲染框架支持情况：Skyline （使用最新 [Nightly](/miniprogram/dev/devtools/nightly.html) 工具调试）、WebView

## 功能描述

页面链接。

1. navigator 在 Skyline 下视为文本节点，只能嵌套文本节点（如 text），不能嵌套 view、button 等普通节点，如 <button> <navigator>foo</navigator> </button>

2. 新增 span 组件用于内联文本和图片，如 <span> <image> </image> <navigator>bar</navigator> </span>

## 通用属性


```json
[
  {
    "属性": "target",
    "类型": "string",
    "默认值": "self",
    "必填": "否",
    "说明": "在哪个目标上发生跳转，默认当前小程序",
    "最低版本": "[2.0.7](1003706)",
    "子项": [
      {
        "合法值": "self",
        "说明": "当前小程序"
      },
      {
        "合法值": "miniProgram",
        "说明": "其它小程序"
      }
    ]
  },
  {
    "属性": "url",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "当前小程序内的跳转链接",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "open-type",
    "类型": "string",
    "默认值": "navigate",
    "必填": "否",
    "说明": "跳转方式",
    "最低版本": "[1.0.0](1003706)",
    "子项": [
      {
        "合法值": "navigate",
        "说明": "对应 [wx.navigateTo](/miniprogram/dev/api/route/wx.navigateTo.md) 或 [wx.navigateToMiniProgram](/miniprogram/dev/api/navigate/wx.navigateToMiniProgram.md) 的功能",
        "最低版本": ""
      },
      {
        "合法值": "redirect",
        "说明": "对应 [wx.redirectTo](/miniprogram/dev/api/route/wx.redirectTo.md) 的功能",
        "最低版本": ""
      },
      {
        "合法值": "switchTab",
        "说明": "对应 [wx.switchTab](/miniprogram/dev/api/route/wx.switchTab.md) 的功能",
        "最低版本": ""
      },
      {
        "合法值": "reLaunch",
        "说明": "对应 [wx.reLaunch](/miniprogram/dev/api/route/wx.reLaunch.md) 的功能",
        "最低版本": "[1.1.0](1003706)"
      },
      {
        "合法值": "navigateBack",
        "说明": "对应 [wx.navigateBack](/miniprogram/dev/api/route/wx.navigateBack.md) 或 [wx.navigateBackMiniProgram](/miniprogram/dev/api/navigate/wx.navigateBackMiniProgram.md) （基础库 2.24.4 版本支持）的功能",
        "最低版本": "[1.1.0](1003706)"
      },
      {
        "合法值": "exit",
        "说明": "退出小程序，\u0000INLINECODE_0\u0000时生效",
        "最低版本": "[2.1.0](1003706)"
      }
    ]
  },
  {
    "属性": "delta",
    "类型": "number",
    "默认值": "1",
    "必填": "否",
    "说明": "当 open-type 为 'navigateBack' 时有效，表示回退的层数",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "app-id",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "当\u0000INLINECODE_1\u0000且\u0000INLINECODE_2\u0000时有效，要打开的小程序 appId",
    "最低版本": "[2.0.7](1003706)"
  },
  {
    "属性": "path",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "当\u0000INLINECODE_3\u0000且\u0000INLINECODE_4\u0000时有效，打开的页面路径，如果为空则打开首页",
    "最低版本": "[2.0.7](1003706)"
  },
  {
    "属性": "extra-data",
    "类型": "object",
    "默认值": "",
    "必填": "否",
    "说明": "当\u0000INLINECODE_5\u0000且\u0000INLINECODE_6\u0000时有效，需要传递给目标小程序的数据，目标小程序可在 \u0000INLINECODE_7\u0000，\u0000INLINECODE_8\u0000 中获取到这份数据。[详情](/miniprogram/dev/framework/app-service/app.md)",
    "最低版本": "[2.0.7](1003706)"
  },
  {
    "属性": "version",
    "类型": "string",
    "默认值": "release",
    "必填": "否",
    "说明": "当\u0000INLINECODE_9\u0000且\u0000INLINECODE_10\u0000时有效，要打开的小程序版本",
    "最低版本": "[2.0.7](1003706)",
    "子项": [
      {
        "合法值": "develop",
        "说明": "开发版"
      },
      {
        "合法值": "trial",
        "说明": "体验版"
      },
      {
        "合法值": "release",
        "说明": "正式版，仅在当前小程序为开发版或体验版时此参数有效；如果当前小程序是正式版，则打开的小程序必定是正式版。"
      }
    ]
  },
  {
    "属性": "short-link",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "当\u0000INLINECODE_11\u0000时有效，当传递该参数后，可以不传 app-id 和 path。链接可以通过【小程序菜单】->【复制链接】获取。",
    "最低版本": "[2.18.1](1003706)"
  },
  {
    "属性": "hover-class",
    "类型": "string",
    "默认值": "navigator-hover",
    "必填": "否",
    "说明": "指定点击时的样式类，当\u0000INLINECODE_12\u0000时，没有点击态效果",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "hover-stop-propagation",
    "类型": "boolean",
    "默认值": "false",
    "必填": "否",
    "说明": "指定是否阻止本节点的祖先节点出现点击态",
    "最低版本": "[1.5.0](1003706)"
  },
  {
    "属性": "hover-start-time",
    "类型": "number",
    "默认值": "50",
    "必填": "否",
    "说明": "按住后多久出现点击态，单位毫秒",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "hover-stay-time",
    "类型": "number",
    "默认值": "600",
    "必填": "否",
    "说明": "手指松开后点击态保留时间，单位毫秒",
    "最低版本": "[1.0.0](1003706)"
  },
  {
    "属性": "bind:success",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "当\u0000INLINECODE_13\u0000且\u0000INLINECODE_14\u0000时有效时有效，跳转小程序成功",
    "最低版本": "[2.0.7](1003706)"
  },
  {
    "属性": "bind:fail",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "当\u0000INLINECODE_15\u0000且\u0000INLINECODE_16\u0000时有效时有效，跳转小程序失败",
    "最低版本": "[2.0.7](1003706)"
  },
  {
    "属性": "bind:complete",
    "类型": "string",
    "默认值": "",
    "必填": "否",
    "说明": "当\u0000INLINECODE_17\u0000且\u0000INLINECODE_18\u0000时有效时有效，跳转小程序完成",
    "最低版本": "[2.0.7](1003706)"
  }
]
```

## 使用限制

1. 需要用户确认跳转
从 `2.3.0` 版本开始，在跳转至其他小程序前，将统一增加弹窗，询问是否跳转，用户确认后才可以跳转其他小程序。如果用户点击取消，则回调 `fail cancel`。
2. 从2020年4月24日起，跳转其他小程序将不再受数量限制，使用此功能时请注意遵守运营规范。

## 关于调试

- 在开发者工具上调用此 API 并不会真实的跳转到另外的小程序，但是开发者工具会校验本次调用跳转是否成功。[详情](/miniprogram/dev/devtools/different.md#跳转小程序调试支持)
- 开发者工具上支持被跳转的小程序处理接收参数的调试。[详情](/miniprogram/dev/devtools/different.md#跳转小程序调试支持)

## Bug & Tip

1. `tip`：`navigator-hover` 默认为 `{background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;}`, [navigator](/miniprogram/dev/component/navigator-component/navigator) 的子节点背景色应为透明色

## 示例代码

[在开发者工具中预览效果](https://developers.weixin.qq.com/s/Q4t6bSmx7MJt)

```css
.navigator-hover {
  color:blue;
}
.other-navigator-hover {
  color:red;
}
```

```html
<!-- sample.wxml -->
<view class="btn-area">
  <navigator url="/page/navigate/navigate?title=navigate" hover-class="navigator-hover">跳转到新页面</navigator>
  <navigator url="../../redirect/redirect/redirect?title=redirect" open-type="redirect" hover-class="other-navigator-hover">在当前页打开</navigator>
  <navigator url="/page/index/index" open-type="switchTab" hover-class="other-navigator-hover">切换 Tab</navigator>
  <navigator target="miniProgram" open-type="navigate" app-id="" path="" extra-data="" version="release">打开绑定的小程序</navigator>
</view>
```

```html
<!-- navigator.wxml -->
<view style="text-align:center"> {{title}} </view>
<view> 点击左上角返回回到之前页面 </view>
```

```html
<!-- redirect.wxml -->
<view style="text-align:center"> {{title}} </view>
<view> 点击左上角返回回到上级页面 </view>
```

```js
Page({
  onLoad: function(options) {
    this.setData({
      title: options.title
    })
  }
})
```
