【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/
本文版权归本人和博客园所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
【iOS进阶】UIWebview加载搜狐视频,自动跳回客户端 问题解决的更多相关文章
- iOS中 UIWebView加载网络数据 技术分享
直奔核心: #import "TechnologyDetailViewController.h" #define kScreenWidth [UIScreen mainScreen ...
- iOS开发-UIWebView加载本地和网络数据
UIWebView是内置的浏览器控件,可以用它来浏览网页.打开文档,关于浏览网页榜样可以参考UC,手机必备浏览器,至于文档浏览的手机很多图书阅读软件,UIWebView是一个混合体,具体的功能控件内置 ...
- 关于IOS中UIWebView 加载HTML内容
NSString *strContent=[info objectForKey:@"newContent"]; { NSArray *paths = NSSearchPathFor ...
- UIWebView加载ANSI格式的txt文件出现乱码问题解决
//若为txt文档 if([encodedString hasSuffix:@".txt"]){ NSData* Data = ...
- 【iOS系列】-UIWebView加载网页禁止左右滑动
[iOS系列]-UIWebView加载网页禁止左右滑动 问题: 做项目时候,用UIWebView加载网页的时候,要求是和微信网页中打开的网页的效果一样,也即是只能上下滑动,不能左右滑动,也不能缩放. ...
- 新浪微博客户端(13)-使用UIWebView加载OAuth授权界面
使用UIWebView加载OAuth授权界面 DJOAuthViewController.m #import "DJOAuthViewController.h" @interfac ...
- uiwebview加载中文URL
uiwebview加载中文URL _paperGamePath = [_paperGamePath stringByAddingPercentEscapesUsingEncoding:NSUTF8St ...
- 仿爱奇艺视频,腾讯视频,搜狐视频首页推荐位轮播图(二)之SuperIndicator源码分析
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52510431 背景:仿爱奇艺视频,腾讯视频 ...
- Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果
1.webView加载h5网页视频,播放不了,android3.0之后要在menifest添加硬件加速的属性 android:hardwareAccelerated="true". ...
随机推荐
- Oracle批量更新数据,使用begin end
/* 使用begin end批量更新 注意end后面必须使用;结束 并且每条update语句都要用;来结束 所以close为;END; 是为了补全语法 */ <foreach collectio ...
- mysql多源复制安装
多源复制的意思是多主一从. 多源复制的前提是必须要开启GTID模式. master1 :192.168.1.110 master2 :192.168.1.111 slave :192.168.1.15 ...
- hdu4407Sum(容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=4407 Sum Time Limit: 2000/1000 MS (Java/Others) Memory ...
- nginx 配置虚拟机 支持pathinfo
server { server_name shopx.local *.shopx.local; charset utf-8; root /Users/x/www/php/shopx.local/sho ...
- Python中的函数(2)
一.实参和形参 def greet_user(username): """显示简单的问候语,且显示用户名""" print(& ...
- 03 数据解析-Xpath
Xpath解析 XPath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线. ...
- Java基础学习总结(91)——阿里巴巴Java开发手册公开版
1.不要嫌名字长 无论是方法,变量,还是函数的取名,不要嫌弃名称太长,只要能够表示清楚含义就可以了. 2.String[] args而不是String args[] 中括号是数组类型的一部分,数组定义 ...
- Leetcode 233.数字1的个数
数字1的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . ...
- hexo干货系列:(一)hexo+gitHub搭建个人独立博客
前言 一直想要一个自己的独立博客,但是觉得申请域名+服务器的太麻烦了就一直没有实现.偶然机会发现Hexo这个优秀的静态博客框架,再搭配现在流行的gitHub,简直是完美写博客的黄金搭档(免费+方便). ...
- 使用jemalloc优化nginx和mysql内存管理
预先安装autoconf 和 make yum -y install autoconf make jemalloc的安装jiemalloc 开源项目网站 http://www.canonware.co ...