设置背景透明
设置webview的backgroundColor属性为[UIColor clearColor];
webView.backgroundColor = [UIColor clearColor];
为webview中的HTML页面的body标签添加CSS背景样式设置
<body style="background-color: transparent">
...
</body>
设置webview的opaque属性值为NO
webView.opaque = NO;
加载本地HTML页面
方式一
NSString *localHTMLPageName = @"myPage";
NSString *path = [[NSBundle mainBundle] pathForResource:localHTMLPageName ofType:@"html"];
// 从html文件中读取html字符串
NSFileHandle *readHandle = [NSFileHandle fileHandleForReadingAtPath:path];
NSString *htmlString = [[NSString alloc] initWithData:
[readHandle readDataToEndOfFile] encoding:NSUTF8StringEncoding];
// 或使用
// NSString *htmlString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:NULL];
// baseURL用来确定htmlString的基准地址,
// 相当于HTML的<base>标签的作用,定义页面中所有链接的默认地址。
[webView loadHTMLString:htmlString baseURL:[[NSBundle mainBundle] bundleURL]];
方式二
NSString *localHTMLPageName = @"myPage";
NSString *localHTMLPageFilePath = [[NSBundle mainBundle] pathForResource:localHTMLPageName ofType:@"html"];
NSURL *localHTMLPageFileURL = [NSURL fileURLWithPath:localHTMLPageFilePath];
[webView loadRequest:[NSURLRequest requestWithURL:localHTMLPageFileURL]];
移除滚动后的外边阴影
UIWebView包含一个scrollView组件,用来将关联web内容实现滚动效果,页面滚动后的UIWebView的面板周围会出现阴影效果,该效果是在四周添加UIImageView实现的,因此移除这种阴影效果的代码如下:
UIScrollView *scrollView = webView.scrollView;
for (int i = 0; i < scrollView.subviews.count ; i++) {
UIView *view = [scrollView.subviews objectAtIndex:i];
if ([view isKindOfClass:[UIImageView class]]) {
view.hidden = YES ;
}
}
参见Remove UIWebView Shadow?
在Safari中打开链接地址
默认情况下,长按web页面中的链接,系统会自动呼出菜单提供open,copy和cancel选项,但如果要实现触击链接跳转至safari中打开页面该怎么做呢?UIWebViewDelegate协议中,包含
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
接口,如果为webView添加了delegate对象并实现该接口,那么在webView加载任何一个frame之前都会delegate对象的该方法,该方法的返回值用以控制是否允许加载目标链接页面的内容,返回YES将直接加载内容,NO则反之。并且UIWebViewNavigationType枚举,定义了页面中用户行为的分类,包括
UIWebViewNavigationTypeLinkClicked,用户触击了一个链接。
UIWebViewNavigationTypeFormSubmitted,用户提交了一个表单。
UIWebViewNavigationTypeBackForward,用户触击前进或返回按钮。
UIWebViewNavigationTypeReload,用户触击重新加载的按钮。
UIWebViewNavigationTypeFormResubmitted,用户重复提交表单
UIWebViewNavigationTypeOther,发生其它行为。
因此,实现用户触击UIWebView页面中的链接,并跳至Safari中打开链接页面的步骤如下:
定义实现UIWebViewDelegate协议的类MyWebViewDelegate(通常是由包含UIWebView的controller中实现UIWebViewDelegate协议)。
按如下方式实现webView:shouldStartLoadWithRequest:navigationType:接口
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
if ( navigationType == UIWebViewNavigationTypeLinkClicked ) {
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
return YES;
}
新建MyWebViewDelegate对象,并赋值给webView的delegate属性
参见:UIWebView open links in Safari
禁用页面滚动弹跳
之前提到UIWebView使用一个UIScrollView对象来关联web页面的内容,通过UIWebView的scrollView属性即可获得该对象,默认情况下网页长度超出设备视口长度后页面会滚动,用户使用手指滚动页面到页面边距并放开手指后页面会产生一个弹跳效果,去除这个效果的方法如下
webView.scrollView.bounces = NO ;
参见:Stop UIWebView from “bouncing” vertically?
scalesPageToFit属性
默认情况下UIWebView加载HTML页面后,会以页面的原始大小进行显示,亦即如果页面的大小超出UIWebView视口大小,UIWebView会出现滚动效果,而且用户只能通过滚动页面来查看不同区域的内容,不能使用手指的捏合手势来放大或缩小页面。通过设置
webView.scalesPageToFit = YES ;
UIWebView可以缩放HTML页面来适配其视口大小,从而达到整屏显示内容的效果,并且用户可以用捏合动作来放大或缩小页面来查看内容。
调用javascript代码
UIWebView提供
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
方法,可以在objective-c代码中调用javascript代码,参数script字符串保存了所要执行的js代码字符串,执行结果以字符串形式返回。以获取web页面标题为例,代码如下:
NSString *pageTitle = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
脚本的代码内容还要依据具体的应用场景。此外,该方法规定执行的脚本时长限定在10s内,为的是防止过长时间的阻塞页面主线程,超过执行时间上线会自动停止脚本运行,并且脚本可分配内存限定在10MB内,超过分配上线将会引发异常。
javascript调用native代码
以上提到,UIWebView加载任何一个页面之前都会调用其代理的
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
方法,通过调用参数request对象的URL属性来获取关于本次请求的地址以及参数信息,因此可以通过js代码模拟一次特殊的网络请求来达到调用该代理方法的作用,并通过过滤“特殊的url”来达到有目的性的js代码调用native代码的效果。所谓的“特殊的url”主要的目的是达到一种标识的效果,我们可以规定url的scheme部分,如appscheme://appName?invokeMethodName=objcMethod¶mA=xxx;也可以在常规的url后面附加特殊的参数标识,如http://www.yoursite.com?objecMethodCallFlag=1&methodName=methodA¶mA=xxx。之后根据规定在代理方法中去相应的解析url并做出if else判断即可。常见的调用方式是动态添加一个隐藏的iframe标签到HTML页面,如下:
// js
function invokeObjc(url) {
var iframe;
iframe = document.createElement("iframe");
iframe.setAttribute("src", url);
iframe.setAttribute("style", "display:none;");
document.body.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
}
var url = "appscheme://appName?invokeMethodName=objcMethod¶mA=xxx";
invokeObjc(url);
// objc
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
static NSString *callScheme = @"appscheme";
static NSString *invokeMethodName = @"invokeMethodName";
NSString *scheme = request.URL.scheme ;
if ([callScheme isEqualToString:scheme]) {
NSString *query = request.URL.query ;
NSArray *arr = [query componentsSeparatedByString:@"&"];
__block NSString *methodName = @"" ;
NSMutableDictionary *params = [NSMutableDictionary new];
// 未考虑参数的解码操作
[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSArray *kv =[obj componentsSeparatedByString:@"="];
if (kv) {
if ([invokeMethodName isEqualToString: kv[0]]) {
methodName = kv[1];
}else{
[params setObject:kv[1] forKey:kv[0]];
}
}
}];
// 获得方法名和参数之后,可以添加逻辑判断
NSLog(@"%@",methodName);
NSLog(@"%@",params);
return NO ;
}
return YES ;
}
前面提到的native代码调用js代码的实现方式,结合两种实现方式即完成了js与native代码间的简单的通信操作。
让UIWebView更加接近native
某些情况下,我们既想要UIWebView加载web页面,又想使得所加载的页面的外观和操作行为更加接近native感觉。这时需要使用一些CSS样式来达到这些效果,这些CSS只适用于IOS中的Safari。
-webkit-touch-callout
禁用长按触控对象弹出的菜单。IOS中,当你长按一个触控对象时,如链接,safari会弹出包含链接信息的菜单。禁用此行为CSS代码
.disable-callout{
-webkit-touch-callout:none ;
}
或在webViewDidFinisheLoad中使用
[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitTouchCallout='none';"];
-webkit-user-select
控制用户是否可以选择页面元素内容。IOS中,在页面元素中进行长按操作,safari会弹出菜单,来允许进行选择行为。禁用此行为代码
.disable-select{
-webkit-user-select:none;
}
或在webViewDidFinisheLoad中使用
[webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.style.webkitUserSelect='none';"];
-webkit-tap-highlight-color
覆盖当用户tap链接或clickable元素时默认产生的高亮颜色(灰色)。如
.no-highlight{
-webkit-tap-highlight-color:rgba(0,0,0,0);
}相关推荐
Vue项目实战:5分钟搞定高德地图离线部署(附避坑指南)
本文详细介绍了在Vue项目中实现高德地图离线部署的完整方案。针对内网或网络隔离环境,通过获取并改造JSAPI文件、下载组织地图瓦片数据,并集成vue-amap组件,实现地图功能的本地化运行。文中提供了核心代码、避坑指南及性能优化建议,帮助开发者快速构建稳定可靠的离线地图应用。
UIWebView的一些用法总结
为什么80%的码农都做不了架构师?>>> ...
企业微信群机器人Webhook配置全攻略:从创建到发送消息的完整流程
本文详细介绍了企业微信群机器人Webhook的配置流程,从创建机器人到获取Webhook地址,再到发送各类消息的完整步骤。通过Python代码示例展示了文本、Markdown等消息类型的发送方法,并提供了性能优化建议和常见问题排查技巧,帮助企业高效实现自动化消息推送。
uiwebview 和navigation 结合使用
uiwebview 和navigation 结合使用 例如 点击 uiwebview种的一个标题 然后链接到详细内容查看页面 然后点导航上的返回 又回到前一个页面? - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebVi
英飞凌AURIX 2G 系列MCU关于外设模块EVADC的实现原理及对应MCAL(EB Tresos)配置项详细讲解
本文章讲述了英飞凌AURIX 2G系列MCU关于外设模块EVADC的实现原理及对应MCAL配置工具(EB)的配置项。
2026闲鱼数据采集实战:本地YOLO识别滑块验证码+接口签名分析+零成本价格监控系统
2026闲鱼反爬系统升级实战:零成本解决方案 本文针对2026年闲鱼最新反爬机制提出了一套完整的零成本解决方案。系统面临四大挑战:AI滑块验证、接口签名升级、设备指纹绑定和精细化行为检测。通过以下技术突破实现稳定运行: 本地化AI破解:训练YOLOv11n模型实现98%准确率的滑块识别,替代付费打码平台 逆向工程:Hook闲鱼App签名算法,用Python重写HMAC-SHA256签名生成器 设备指纹管理:建立"一机一号一IP"机制,维护50+种设备特征 行为模拟:开发四阶段滑动轨迹模型
ios首次加载web_iOS预加载Web页面方案
iOS预加载Web页面方案可以预加载多个网址,然后在离线状态去显示那几个网址,看看是不是都完全缓存下来了。使用方法在需要开启预加载的地方创建self.sCache = [STMURLCache create:^(STMURLCacheMk *mk) {mk.whiteListsHost(whiteLists).whiteUserAgent(@"starming");}];这里是所有可设置项目,默认...
从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》
DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。.........
将View设置为Opaque
转自:http://www.tiboo.cn/dianzijie/b1837169/ This property provides a hint to the drawing system as to how it should treat the view. If set to YES, the drawing system treats the view as fully opaqu
【swjtu】算法实验2.4分析算法时间复杂度
分析给定算法的时间复杂度。 上机实验,绘制不同输入情况下的运行时间曲线,并与(1)中的分析结果进行比较。 撰写相应的实验报告,实验报告内容包括:实验目的、实验任务、 实验环境、实验步骤、实验结果及其分析以及实验总结等部分内容。
基于Simulink的四足机器人楼梯攀爬仿真模型
构建一个基于Simulink的四足机器人楼梯攀爬仿真模型,旨在模拟四足机器人在面对楼梯等障碍时的运动控制和稳定性调整。以下是一个详细的步骤指南,帮助你从零开始创建这样一个仿真模型。
iOS UIWebView与WKWebView
第一章 - 引言在iOS开发中,WebView是一种常见的控件,用于在应用中显示网页内容。在过去,我们主要使用UIWebView作为WebView控件,但自iOS 8起,苹果推出了WKWebView,作为UIWebView的升级版本。本文将介绍UIWebView和WKWebView的特点、使用方法和案例。
一篇文章带你快速入门 MATLAB
文章目录一、认识 MATLAB 界面二、MATLAB 的运行方式三、Matlab 中的窗口1. 命令窗口2. MATLAB的程序编辑窗口3. 工作空间窗口4. 命令历史窗口5. 图形窗口6. 当前目录窗口四、MATLAB的帮助系统1. 帮助命令2. 联机帮助五、其他知识补充1. MATLAB的搜索路径2. 变量命名规则3. M文件命名规则 一、认识 MATLAB 界面 在 MATLAB Desktop 中,工具条取代了菜单和工具栏。应用程序库收纳了 MATLAB 产品系列的应用程序,单一文件应用程序打包为一
IOS之浅谈UIWebView
**实现的功能:**这个小demo的基本功能是在文本区输入网址,点击确定按钮后加载网页。加载中显示旋转轮。以下直接给出代码,重要部分加上了注释。 代码实现: .h文件: #import <UIKit/UIKit.h> @interface ViewController : UIViewController<UIWebViewDelegate> @property (stro...
NTscan扫描工具
ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
iOS开发之UIWebView入门教程
iOS开发之UIWebView入门教程 UIWebView是iOS sdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。这篇文章我将使用这个控件,做一个简易的浏览器。如下图: 我们创建一个Window-based Application程序命名为:UIWebViewDemo UIWebView的loadRequest可以用来加载
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
浅谈iOS之UIWebView
前言 在iOS开发过程中,经常用到一些H5交互的页面需要处理,iOS中H5开发的控件之一UIWebView的使用是必须熟练的掌握的。 一、UIWebView 介绍 UIWebView继承与UIView,因此,其初始化方法和一般的View一样,通过alloc和init进行初始化。 UIWebView 是用来加载加载网页数据的一个框。UIWebView可以用来加载pdf、word、doc...
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
iOS 中UIWebView与WKWebView
1. UIWebView UIWebView 适用于iOS8.0以下的系统版本 iOS原生没有提供js直接调用OC的方式,只能通过UIWebView的UIWebViewDelegate协议方法来做拦截,并在这个方法中,根据url来调用OC方法; -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest ...
IOS之UIWebView的使用
现在对于 混合式 移动端开发越来越流行,因为开发成本上、速度上都比传统的APP开发要好,混合式开发 是传统模式与PC网页端相结合的模式。那么提到了 APP的混合模式开发,在Android开发中有WebView作为混合模式开发的桥梁,当然在IOS中也同样有一个 UIWebView 组件来作为混合模式开发的桥梁,那么下面就对UIWebView的一些基本知识详解一下。
iOS组件之UIWebView详解
引言 UIWebView是继承于UIView(有关UIView请参照《iOS组件之UIView详解》),在您的应用程序中,您可以使用UIWebView嵌入网页内容。要做到这一点,你只需创建一个UIWebView对象,将其附加到一个窗口,并发送一个请求来加载网页内容。您也可以使用此类前进和后退的网页的历史记录,甚至可以通过编程设置一些网页内容属性。 目录 1、基本属性及方法 2、iOS
iOS UIWebView 缩放
因为写了响应式的界面至页面不能缩放效果 _webView.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); _webView.scalesPageToFit = YES; _webView.multipleTouchEnabled = YES;
IOS中UIWebView和JavaScript交互
本文主要介绍IOS中UIWebview与JS之间的交互过程。 博客地址:http://webfrogs.github.com/IOS/2012/11/02/webviewandjs/
iOS-UIWebView简单使用
1、什么是UIWebView UIWebView是ios内置的浏览器控件,可以用来直接加载远程的网页资源,也可以加载绝大部分的常见文件htm/html、txt、pdf/keynote、ppt、doc/docx、音视频文件等等,还可以通过调用UIWebView提供的api实现页面的前进、后退、刷新等动作,甚至还可以动态的设置网页内容。 2.简单使用加载网页 /** [UI...
iOS UIWebView 403/404
问题描述 与WindowsPhone不同,iOS UIWebView并不认为403/404这种情况下页面访问是失败的,这也情有可原,但有时候,我们需要对WebView所遇到的403/404进行处理。 解决思路 由于WebView在回调事件,要么发生在NSURLConnection请求之前: - (BOOL)webView:(UIWebView *)web
iOS中UIWebView的使用详解
iOS中UIWebView的使用详解一、初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: (void)loadRequest:(NSURLRequest *)request; 这是加载网页最常用的一种方式,通过一个网页URL来进行加载,这个URL可以是远程的也可以是本地的,例如我
iOS菜鸟学习——UIWebView的使用
在iOS开发中,经常会需要打开一些网页信息,UIWebView是在程序之内打开一个URL。下面我们来了解一下UIWebView的使用。 首先UIWebView如何加载URL。第一种是loadRequest:方法,用法如下: NSURL *url = [[NSURL alloc] initWithString:@"http://google.com"]; NSUR
UIWebView/iOS内置的浏览器控件
UIWebView/iOS内置的浏览器控件 作用:可以浏览网页、打开文档等 能够加载html/htm、pdf、docx、txt等格式的文件 一、根据网站打开网页 1、.h文件要包含协议 2、建立UIWebView UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectMake
935



被折叠的 条评论
为什么被折叠?



