MIP Viewer

优质
小牛编辑
128浏览
2023-12-01

除了 Page 对象,window.MIP.viewer 为开发者提供了一些常用的方法或者属性,我们来大致了解一下。

isIframed

属性类型 boolean,表示是否被嵌入到 iframe 中。

if (window.MIP.viewer.isIframed) {
  // Fix some iframe bugs
}

window.MIP.viewer.isIframedwindow.MIP.viewer.page.standalone 的区别

百度搜索结果页的 SuperFrame 会创建 iframe 把目标页面嵌入其中进行展现。类似地 MIP 内部也会创建 iframe (用于多个 MIP 页之间的连接),因此使用 isIframed 只能判断当前页面是否被嵌入 iframe,而不能判断当前页面在不在搜索结果页,因为 MIP Page 的后续页面同样在 iframe 内部。

这两个变量正确的用法应该是:isIframed 用于增加针对 iframe 的一些兼容代码,如处理 iOS 下 iframe 的滚动 BUG 等等;而 standalone 则用于处理单独打开或者嵌入在搜索结果页(主要是和 SuperFrame 交互)两种情况的不同逻辑。

sendMessage

  • 参数
    • eventName, string, 信息名称
    • data, Object, 信息内容
  • 返回值:无。

用于向 外部 发送信息 (postMessage),仅在 MIP 页面被嵌入 SuperFrame 时生效。如在百度搜索结果页中需要通知信息给外部的 SuperFrame 时可以使用。

window.MIP.viewer.sendMessage('mipMessage', {message: 'Hello SF! I am MIP'})

onMessage

  • 参数
    • eventName, string, 信息名称
    • callback, Function, 收到特定信息后的回调函数。仅有一个参数:消息的具体信息。
  • 返回值:无。

用于接收 外部 发送的信息 (postMessage),仅在 MIP 页面被嵌入 iframe 时生效。如在百度搜索结果页中需要接收外部的 SuperFrame 发来的信息时可以使用。

window.MIP.viewer.onMessage('sfMessage', ({message}) => console.log(message))

open

  • 参数
    • to, string, 目标页面的 URL
    • options, Object, 一些配置项
      • options.isMipLink, boolean, 默认 true。目标页面是否是 MIP 页。如果不是,直接使用 top.location.href 进行跳转。
      • options.replace, boolean, 默认 false。目标页面是否采用 replace 方式打开。如果是,则不会新增一条历史记录。
  • 返回值:无。

以 API 的方式进行页面跳转,效果和 <a href="xxx" mip-link> 相同。如果目标页是 MIP 页,则会使用 MIP Page 的方式进行页面切换动画。