最近涉及的一个业务,在app内的一个广告,点击打开webView,加载的是一个淘宝商品详情页,效果是打开该webView自动跳转至淘宝对应的页面,同时在自己的app仍然加载页面,点击评论等也同样能跳转至淘宝客户端

经过拦截该网页,得出一个结论,如果是需要跳转,淘宝都会调用一个tbopen开头的地址,这样那就简单了,以下直接贴代码

1、第一步:info.plist添加白名单

这里经过反复测试,发现淘宝自定义跳转协议只有tbopen,所以我猜测淘宝客户端肯定添加了tbopen这样一个url scheme,所以我们只要加这个白名单就有直接跳转的能力了

(当然你也可以加taobao这个白名单,那对应的你的openURL就需要自己拼接,例如 taobao://m.taobao.com/tbopen/index.html?action=ali.open.nav&module=h5&bootImage=0&source=sb&appkey=24585446&smbSid=f6CPFcarHDsCAbcPsILVPbbX_1561013627944&rbbt=bc.mainDetail.0.2.122bef3b90e447e199100ff5550b9c4d&params=%7B%22fid%22%3A%22ckN4GzSh9iL%22%2C%22mtopCostTime%22%3A%22163%22%2C%22uiKey%22%3A%22%2Falbum%2Flist.htm%22%2C%22_t%22%3A%221561013656447%22%7D&h5Url=https%3A%2F%2Fh5.m.taobao.com%2Fawp%2Fcore%2Fdetail.htm%3Fid%3D590575701816%26point%3D%25257B%252522from%252522%25253A%252522h5%252522%25252C%252522h5_uid%252522%25253A%252522f6CPFcarHDsCAbcPsILVPbbX%252522%25252C%252522ap_uri%252522%25253A%252522sb_redirect_manual%252522%25252C%252522page%252522%25253A%252522mainDetail%252522%25252C%252522callType%252522%25253A%252522scheme%252522%25257D

2、第二步:拦截tbopen关键字,处理对应的业务逻辑

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{

    NSURL *requestUrl = navigationAction.request.URL;

    if ([navigationAction.request.URL.scheme containsString:@"tbopen"]) {//拦截tbopen开头的url
if ([[UIApplication sharedApplication] canOpenURL:requestUrl]) {//能打开手机淘宝APP
[[UIApplication sharedApplication] openURL:requestUrl];// 打开淘宝app
}
}
decisionHandler(WKNavigationActionPolicyAllow);
}

ok,经过上面的两歩之后我们就不需要考虑其他东西了,这也是经过淘宝开发人员和产品设计多年迭代出的作品,应该考虑还是比较全面的,所以稍微观察一下规律按照他们的规则来就好了

注:经过多次测试发现并不是每次打开webView都会调用tbopen开头的url,但第一次一定会,这个影响不大,具体原因还没深入研究,如有不对之处,欢迎指正

最新文章

  1. <转>Win7系统下利用U盘安装Ubuntu_12.04实现双系统教程
  2. Sublime Text 3 Install Markdown Preview Plugins
  3. 深入理解js——隐式原型
  4. [转]Oracle SOME,ANY,All,EXISTS,IN
  5. 使用text-overflow:ellipsis对溢出文本显示省略号有两个好处
  6. python 大文件以行为单位读取方式比对
  7. POJ 2217 Secretary (后缀数组)
  8. 移动端300ms点击延迟
  9. C#中的函数式编程:递归与纯函数(二)
  10. VisualVM监控远程服务器JVM
  11. 详解JSOUP的Select选择器语法
  12. 【转】33 个 2017 年必须了解的 iOS 开源库
  13. python练习题-day13
  14. for...in的改进版for...of
  15. VS工具栏没有出现可用工具的情况
  16. log4net 单独项目
  17. shell seq 用法
  18. 缓存 Memached
  19. Redis笔记(2)单机数据库实现
  20. Spring第四天——SSH整合

热门文章

  1. ListView虚拟模式封装
  2. 【Luogu】P1607庙会班车Fair Shuttle(线段树+贪心)
  3. BZOJ 3990 [SDOI2015]排序 ——搜索
  4. 算法复习——2—sat(bzoj2199)
  5. 【SDOI2018】战略游戏(同时普及虚树)
  6. javaScriptCore 实战与小结
  7. POJ 3099 Go Go Gorelians
  8. ElasticSearch集群状态查看命令大全
  9. C++练习,计算间隔天数
  10. [UIScreen mainScreen].applicationFrame与[UIScreen mainScreen].bounds区别