DCloud_UNI_CHB
DCloud_UNI_CHB
  • 发布:2017-08-25 19:40
  • 更新:2023-04-03 14:11
  • 阅读:55264

sitemap.json概述 - wap2app教程

分类:wap2app

sitemap.json原理

sitemap.json 是 wap2app 项目中最重要的配置文件,M站的优化增强工作,大部分都在 sitemap.json 中完成。
在展开说明 sitemap.json 每个配置项的含义前,我们需要先了解 sitemap.json 的原理。

M站的每个页面在 wap2app 中都是运行在 webview 内的,开发者首先需要梳理下M站的所有 url,都配置到 sitemap.json 里。
当然某些页面 url 虽然不同,但实际上内容结构是一样的。比如一个新闻站的不同新闻详情,可以通过通配符或正则表达式来批量匹配 url。
在 sitemap.json 中的 pages 节点下面,需要把全站的 url 都配进去。

举例:
某M站有2级页面,首页是列表页,网址是 http://m.example.com,二级页是详情页,网址是在 detail 目录下的若干 html 文件。
那么开发者需要在 sitemap 中的pages下面,新建2个节点,把这2类 url 归纳到2个 page(也就是2个Webview里)。

{  
  "global": {   
  },   
  "pages": [  
    {  
      "webviewId": "__W2A__m.example.com",//首页  
      "matchUrls": [  
        {  
          "href": "http://m.example.com"  
        },  
        {  
          "href": "http://m.example.com/" //这里与上行的不同在于url末尾多了一个/。多个匹配规则是or关系  
        }  
      ]  
    },  
    {  
      "webviewId": "detail",//详情页  
      "matchUrls": [  
        {  
          "pathname": "WILDCARD:/detail/*.html" //这里使用了通配符写法,后续有专门章节介绍通配符。  
        }  
      ]  
    }  
  ]  
}

把url和webview的关系归纳好后,我们就可以对每个webview的显示做强化。
在每个page下面,除了webviewId、matchUrls,还有一个重要的属性就是webviewParameter。
开发者可以在webviewParameter里设置各种强大功能,设置原生title、调用原生渲染、通过注入css调整页面样式、注入js增强页面功能。
具体webviewParameter的配置说明另见http://ask.dcloud.net.cn/article/12749

小结一下,也就是说,sitempap.json的主要工作就是:

  1. 规整M站的URL,创建pages规则,并把各个url页面匹配到不同page中。
  2. 针对该webview需设置哪些增强属性。

sitemap.json配置

在 HBuilder 中新建 wap2app 项目后,默认 sitemap.json 内容如下:

{  
  "global": {  
    "webviewParameter": {  
      "titleNView": {//原生标题栏  
        "backgroundColor": "#f7f7f7",//导航栏背景色  
        "titleColor": "#000000",//标题颜色  
        "titleSize": "17px",//标题字体大小  
        "borderColor": "#cccccc"  
      }  
    },  
    "easyConfig": {}  
  },  
  "pages": [  
    {  
      "webviewId": "__W2A__m.example.com",//首页  
      "matchUrls": [  
        {  
          "href": "http://m.example.com"  
        }, {  
          "href": "http://m.example.com/"  
        }  
      ]  
    }  
  ]  
}

从代码中可以看出来,sitemap.json 文件中有两个节点:

  • global:App全局配置
  • pages:配置M站的具体页面,可在具体页面的配置中覆盖 global 中的全局配置

global

global 节点实现 App 全局配置,其下可设置两个节点:

  • webviewParameter:webview通用配置,比如通用原生标题栏颜色等;详细参考webviewParameter配置
  • easyConfig:为提升用户体验而提供的简化设置,比如后退处理等;详细参考easyConfig配置

wap2app 中每个页面默认使用 global 的配置,若相同的属性在特定页面中也有配置,则以对应页面的配置属性值为准;如下为一个示例,在 page1 页面,单独定义了原生导航栏的背景色和字体颜色。

{  
  "global": {//全局默认配置,每个页面可以单独定义覆盖  
    "webviewParameter": {  
      "titleNView": {  
        "backgroundColor": "#f7f7f7",//原生标题栏背景色  
        "titleColor": "#000000",//标题颜色  
        "titleSize": "17px",//标题字体大小  
        "borderColor": "#cccccc"  
      }  
    },  
    "easyConfig": {}  
  },  
  "pages": [  
    {  
      "webviewid": "page1",  
      "matchurls": [],  
      "webviewParameter": {  
        "titleNView": {//覆盖了global原生标题栏配置  
          "backgroundColor": "#ff0000",  //导航栏背景色为红色  
          "titleColor": "#ffffff"  
        }  
      }  
    }  
  ]  
}

pages

pages 为 Array 类型,包含M站所有需要增强的页面配置,格式如下:

"pages":[  
  {  
      //page1 配置  
  }, {  
      //page2 配置  
  }  
]

page

每个页面相关属性均配置在 page 节点下,page 节点包含四个属性:

  • webviewId:当前页面所属webview的id,类型为String,方便后续增强编程实现,比如在app.js中可使用plus.webview.getWebviewById()方法获取当前的webview对象
  • matchUrls:页面URL匹配规则,满足matchUrls匹配规则的页面,将使用当前页面配置规则打开,比如webview的id 固定为本页配置的"webviewId"属性,详细参考matchurls配置
  • webviewParameter:webview相关设置,比如原生导航条,详细参考webviewParameter配置
  • easyConfig:为提升用户体验而提供的简化实现,比如back按键时,优先关闭弹出层,详细参考easyConfig配置

示例如下:

{  
  "webviewId": "page1",  
    "matchUrls": [],//url匹配规则  
    "webviewParameter":{  
        //TODO webview属性设置  
    },  
    "easyConfig":{  
      //TODO 简化配置  
    }  
}

wap2app打开新页面的流程为:

  • 遍历 pages 节点下的每个 page 对象
  • 使用新页面的 url 地址和 page 对象中的 matchUrls 规则进行匹配;
  • 若匹配成功,则使用当前的 page 对象创建新的 webview(id为page对象的webviewId属性、webview属性为当前page对象配置的webviewParameter),然后使用新的 webview 加载新页面 url
  • 若匹配失败,则使用global属性创建新的 webview(webview的id随机),然后使用新的 webview 加载新页面url

同一类别的页面应该配置为一个 page 对象,比如详情页面,大多核心 DOM 结构、页面布局相同,这些详情页需配置的增强方案相同;

注意:首页的 webviewid 必须为W2A+首页域名,例如:W2Am.example.com,HBuilder 新建 wap2app 工程时会默认生成,不能修改。

了解 sitemap.json 的格式后,就可以继续顺序阅读matchUrls配置webviewParameter配置easyConfig配置等文章了,了解每个节点的详细配置项。

7 关注 分享
赵梦欢 Trust 雪之梦技术驿站 海盜頭頭 Mexii 3***@qq.com 常轩

要回复文章请先登录注册

1***@163.com

1***@163.com

我的sitemap.json 和app.js离线打包后没用发挥作用。就像没执行一样,有哪位遇到过吗
2023-04-03 14:11
y***@vip.qq.com

y***@vip.qq.com

使用WAP2APP,遇到的一个问题,还请大家帮忙解决。
1、M站的首页,会判断当前是否为已登录状态。如果是,则进入首页,如果不是,则302跳转至登录页面。
2、想达到的要求:首页默认显示底部导航栏,登录页不显示底部导航栏。
3、现在遇到的问题:无论是服务端的302跳转,还是本地JS的window.locattion.href跳转,都无法将首页和登录页匹配到不同的webview中。所以也就无法实现第2点需求。
还请大家多多指教,找出最好方案。
2020-06-26 00:49
y***@vip.qq.com

y***@vip.qq.com

使用WAP2APP,遇到的一个问题,还请大家帮忙解决。
2020-06-26 00:46
2***@qq.com

2***@qq.com

回复 hgdc :
ok 虽然还是不懂,但是thank you
2020-06-04 16:36
hgdc

hgdc

回复 2***@qq.com :
就是定义页面的,每个页面一个ID和一个URL
2020-05-29 23:25
2***@qq.com

2***@qq.com

# sitemap.json到底是干啥用的呢
2020-05-29 13:36
m***@163.com

m***@163.com

请问webview之前的传参有什么好的实现方法吗
2018-08-09 16:14
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 q***@163.com :
如果是服务端的302跳转,应该是不会多开webview的,你需要确认是否为客户端href跳转(此时将跳转前url、跳转后url都配置到一个webview即可);如果问题依然存在,建议提交流应用,然后发帖出来,说明重现问题的步骤。
2017-11-24 22:33
q***@163.com

q***@163.com

遇到一些二次跳转(也可能是302之类的重定向),有时好像会创建2次view,导致第一次返回是空白页,要再返第二次才行。可有什么思路解决这样的问题?wap2app项目。
2017-11-24 22:09
DCloud_UNI_CHB

DCloud_UNI_CHB (作者)

回复 xukaka :
列表-->详情A --> 返回列表(关闭详情webview)--> 详情B(重新创建新的webview)
2017-11-02 17:00