【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". ...
随机推荐
- .NET Core 文件的上传与下载
1.前言 文件导入导出是简单且常用的功能,以下示例实现了文件上传与下载的几种方法,如有不妥的地方,欢迎指正.小白一枚,在往目标前进. 2.1.文件上传 -- 纯文件 <form ac ...
- 【转】反向AJAX
原文链接:http://blog.csdn.net/lccone/article/details/7743886 反向Ajax的基本概念是客户端不必从服务器获取信息,服务器会把相关信息直接推送到客户端 ...
- URAL 1277 Cops and Thieves
Cops and Thieves Time Limit: 1000ms Memory Limit: 16384KB This problem will be judged on Ural. Origi ...
- zoj 2850 Beautiful Meadow
Beautiful Meadow Time Limit: 2 Seconds Memory Limit: 65536 KB Tom's Meadow Tom has a meadow in ...
- 2016上海站EC-final总结!
2016上海站EC-final总结 本想在知乎上发起一个话题:没有半点准备实力菜得抠脚的选手突然有机会参加final是什么体验.不过感觉这样太高调了,于是..... 以上说的就是事实,毫无准备.毫无状 ...
- git clone, push, pull, fetch 的用法
Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...
- 生物遗传学 整理人PYJ (恋_紫花地丁)
生物遗传学整理人PYJ (恋_紫花地丁) 高中生物唯一需要数学知识的就是遗传学的概率计算了.这里对简单的遗传学规律做一些总结. 目录: 1. 孟德尔第一定律(分离定律): 2. 孟 ...
- uva12558 Egyptian Fractions (HARD version)(迭代深搜)
Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ...
- DatePickerDialog
package com.pingyijinren.helloworld.activity; import android.app.DatePickerDialog; import android.su ...
- equals() 和 hashCode()
equals() 和 hashCode()这两个方法在java.lang.Object中,所有的类都可以继承这两个方法: 但是,这两个方法在Object类中的实现一般没什么用,所以你通常需要自己重载这 ...