zoukankan      html  css  js  c++  java
  • 【iOS进阶】UIWebview加载搜狐视频,自动跳回客户端 问题解决

    UIWebview加载搜狐视频,自动跳回搜狐客户端 问题解决

    当我们用UIWebview(iOS端)加载网页视频的时候,会发现,当真机上有搜狐客户端的时候,会自动跳转到搜狐客户端进行播放,这样的体验对我们的体验并不好,所以应该禁掉。

    问题分析:

    首先想到的是这种情况肯定是网页的上的js引发的,于是就查看到网页源码中有这样的js

    function() {
        try {
            var u = navigator.userAgent;
            var m = u.match(/iPhone|iPad|iPod/i);
            if ((location.href.indexOf('#pc') === -1) && (m || u.indexOf('Android') > -1)) {
                if (m && m[0] === 'iPad') {
                    location.href = location.href.replace('http://tv', 'http://pad.tv');
                } else {
                    location.href = location.href.replace('http://tv', 'http://m.tv');
                }
            }
        } catch(e) {}
    })
    

    这个js函数作用时当检测到播放的客户端是手机或者pad时进行url的替换,(电脑端和手机,pad上呈现的效果不一样)。那么问题到这里就很明晰了,后面的肯定就是检测设备上有没有客户端,有的话,就启动客户端。OC中是调用Url Schema,但是在源码中没有找到。

    但是如果我们在加载页面的代理中拦截这个js进行替换,应该也能解决问题,但问题这个js是匿名的,OC中怎样进行调用,好像挺困难的。那么路肯定不只有一条。

    问题解决:

    了解了一下uiwebview的代理方法中

    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{}
    

    文档中的解释是:YES if the web view should begin loading content; otherwise, NO .

    所以也就是只要页面有跳转,就会调用这个方法,其返回YES的时候能进行调转,返回NO的时候不能进行调转,

    拦截其加载过程的URL发现:

    先是: http://tv.sohu.com/
    后是: http://m.tv.sohu.com/
    最后是:sohuvideo://action.cmd
    

    那么最后一个肯定就是调转回客户端的url了,所以拦截这个

    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
    {
         NSString *urlStr = request.URL.absoluteString;
         NSString *urlStr = request.URL.absoluteString;
        if ([urlStr rangeOfString:@"sohuvideo:"].location != NSNotFound || [urlStr rangeOfString:@"action.cmd"].location != NSNotFound ) {
            return NO;
        }else{
            return YES;
        }
    }
    

    这样问题得到完美解决,

    Demo工程:https://github.com/darren90/iOS_Demo/tree/master/02-UIWebview

    后来发现乐视也存在同样的问题,所以同样的思路也可以进行解决。


    欢迎您的访问...

    作者:Darren

    微博:@IT_攻城师

    github:@Darren90

    博客:http://www.cnblogs.com/fengtengfei/


    本文版权归本人和博客园所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

  • 相关阅读:
    c#过滤所有换行符和多余空格
    个人整理网站外链专用
    C++操作符的优先级
    winform下richtextbox 特定字符颜色的改变
    触摸屏网站制作的小细节
    DEDECMS 批量替换alt为空的文章为文章标题的MYSQL语句
    天涯海客邮件搜索群发大师 使用说明
    天涯论坛自动回帖软件免费版使用说明
    c# winform窗口控件委托传参数的写法
    论坛自动回帖软件终于在多特软件站发布成功了
  • 原文地址:https://www.cnblogs.com/fengtengfei/p/4644237.html
Copyright © 2011-2022 走看看