JS 和OC的交互

在程序开发过程中难免会在App中集成一些网页,我们一般也会采用UIWebView直接加载一段URL将需要展示的网页放在App中比如:

    UIWebView *webView = [[UIWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = webView;
    NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];

还可以在其属性中获得相应的方法,如监听界面是否加载完毕的

@property (nonatomic, readonly, getter=isLoading) BOOL loading;

还有可以设置网页是否够缩放,是否使用内联的播放器播放视频,是否设置视频自动播放等等的一些属性。详细的可以查阅文档看一下。尤其一些代理方法也是非常实用的。除了UIWebView,iOS8.0之后有新增了一类,WKWebView是一个比UIWebView更加方便实用的类,其创建方法如下:

    WKWebView *webView = [[WKWebView alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.view = webView;
    NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [webView loadRequest:request];

其使用方式和UIWebView没有太大的区别,多出的是内存消耗变少,实用的接口属性增多

// 这是加载网页最常用的一种方式,通过一个网页URL来加载一个WKWebView,这个URL可以是远程的也可以是本地的,例如我加载百度的主页
- (nullable WKNavigation *)loadRequest:(NSURLRequest *)request;

// 根据一个文件,加载一个WKWebView
- (nullable WKNavigation *)loadFileURL:(NSURL *)URL allowingReadAccessToURL:(NSURL *)readAccessURL NS_AVAILABLE(10_11, 9_0);

// 这个方法需要将html文件读取为字符串从而加载为WKWebView,其中baseURL是我们自己设置的一个路径,用于寻找html文件中引用的图片等素材。
- (nullable WKNavigation *)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;

// 这个方式使用的比较少,但也更加自由,其中data是文件数据,MIMEType是文件类型,characterEncodingName是编码类型,baseURL是素材资源路径
- (nullable WKNavigation *)loadData:(NSData *)data MIMEType:(NSString *)MIMEType characterEncodingName:(NSString *)characterEncodingName baseURL:(NSURL *)baseURL NS_AVAILABLE(10_11, 9_0);

这些便是加载一个网页的前提,下面就是一些交互性的内容,之前在抓包内嵌别人的网页的时候总会有广告,为了适应自己的App需要把这些去掉,所以需要利用Javascript去操作UIWebView的内容,首先呢,可以先用chrome打开要加载的网页,调整为响应设计模式。此时就需要点中你需要隐藏的控件,此时就能够在控制台看到那串标签,以及他所包含的css代码。这样能获取到他的标签就足够了,接下来就可以使用javascript去操作这个控件。首先在代码的加载完成的时候获取到要隐藏的标签代码如下:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // 在HTML标签都加载完成后,开始处理HTML标签,调用JS,操作document
    [webView stringByEvaluatingJavaScriptFromString:@"document.getElementById(‘标签的id‘).remove();"];
}

如果那个标签是Class那么定位到标签的方法可以改为:

// 获取标签名是class的
document.getElementsByClassName(‘标签的类名‘)

如果要去掉的标签是在class的内部可以做相应的调整如下:

// 如果需要隐藏的内容在标签类中是一个数组
document.getElementsByClassName(‘adpic‘)[0].style.display = ‘none‘

上面这种方式是先获取到相应的界面,再根据界面中的标签做相应的处理,即通过Native控制JS将网页中的部分隐藏或显示,还可以设置一些js方法写在Native里面,使用Native直接调用JS的方法,不过这要求会写js代码,简单做个实例如下:

// 自定义editMyLogo函数
[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement(‘script‘);"
     "script.type = ‘text/javascript‘;"
     "script.text = \"function editMyLogo() { "
     "var logo = document.getElementById(‘logo‘);"
     "logo.innerHTML= logo.innerHTML + ‘这是我自己定义的名字‘;"
     "var imglist = logo.getElementsByTagName(‘IMG‘);"
     "for (i=0 ; i < imglist.length ; i++ ){"
     "imglist[i].src = ‘http://pic.to8to.com/attch/day_160218/20160218_d968438a2434b62ba59dH7q5KEzTS6OH.png‘;"
     "}"
     "}\";"
     "document.getElementsByTagName(‘head‘)[0].appendChild(script);"];

    // 执行editMyLogo函数
    [webView stringByEvaluatingJavaScriptFromString:@"editMyLogo();"];
时间: 2024-10-15 09:13:32

JS 和OC的交互的相关文章

转载 【iOS开发】网页JS与OC交互(JavaScriptCore) OC -----&gt;JS

目标 本文介绍利用苹果在iOS7时发布的JavaScriptCore.framework框架进行js与OC的交互.我们想要达到的目标是: OC调用网页上的js方法 网页js调用APP中的OC方法 JavaSciptCore.framework框架介绍 JavaScriptCore是webkit的一个重要组成部分,主要是对js进行解析和提供执行环境.具体介绍请看这篇简书的文章:JavaScriptCore 使用 准备环境 创建一个名为JS与OC交互Demo的iOS工程.然后在storyboard添

史上最全的 UIWebview 的 JS 与 OC 交互

来源:伯乐在线 - 键盘风筝 链接:http://ios.jobbole.com/89330/ 点击 → 申请加入伯乐在线专栏作者 其实一直想给大家整理一下JS与OC的交互,但是没有合适的机会,今天借着微信小应用的发布,以及以后H5必定越来越流行,所以给大家整理一下. 交互方式有三种: 1.UIWebviewDelegate 2.JavaScriptCore 3.WebViewJavascriptBridge按照排序给大家介绍一下,我推荐前两种方法,第三种需要依赖第三方框架,并且不一定能拦截成功

iOS下JS与OC互相调用(一)--UIWebView 拦截URL

http://blog.csdn.net/u011619283/article/details/52135977 最近准备把之前用UIWebView实现的JS与原生相互调用功能,用WKWebView来替换.顺便搜索整理了一下JS 与OC 交互的方式,非常之多啊.目前我已知的JS 与 OC 交互的处理方式: * 1.在JS 中做一次URL跳转,然后在OC中拦截跳转.(这里分为UIWebView 和 WKWebView两种,去年因为还要兼容iOS 6,所以没办法只能采用UIWebView来做.) *

iOS JS 交互之利用系统JSContext实现 JS调用oc方法

ios js 交互分为两块: 1.oc调用js 这一块实现起来比较简单, 我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择如下操作,(拖入的文件夹是蓝色的,相对路径),不然css,js 的路径会存在问题 加载本地html: oc调用js:一句代码搞定 2.js 调用oc js调用oc又分为两种: 1.js端是直接调用方法 这里就要说到ios7才推出的一个新的api    JavaScriptCore,首先我们引入这个类,并初始化一个JSContext对

Js与OC交互

Js与OC交互 源码请点击github地址下载. 下面讲述实现OC和JS的交互,它们相互调用,其中需要写一个静态的HTML文件用于提供JS方法. 效果图如下: screen.png 一.OC调用JS: 不说闲话,看代码如下 需要先在js文件定义方法postStr供oc调用 function postStr(string) { return 'I am the return parameter JS, and param ' + string; } oc代码只需一句即可调用 NSString *s

UIWebView中JS与OC交互 WebViewJavascriptBridge的使用

一.综述 现在很多的应用都会在多种平台上发布,所以很多程序猿们都开始使用Hybrid App的设计模式.就是在app上嵌入网页,只要写一份网页代码,就可以跑在不同的系统上.在iOS中,app多是通过WebView来加载网页,由于功能需求等原因,代码中少不得要和跟网页交互. 二.原理 在iOS中,本地调用Javascript语言,是通过UIWebView中的实例方法stringByEvaluatingJavaScriptFromString:来实现的,该方法通过字符串对象的形式传入JS代码. [w

iOS JS 和 OC交互 / JS 和 native 相互调用

现在app 上越来越多需求是通过UIWebView 来展示html 或者 html5的内容, js 和 native OC代码交互 就非常常见了. js 调用 native  OC代码 第一种机制 (1)最常用的是 利用 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationT

js(javascript)与OC(Objective-C)交互

实质上oc与js的通信交互就是发送消息,也即函数调用,iOS7以后官方公布JavaScriptCore framework中很方便我们对他们之间的相互调用.在以前我们只能通过UIWebView的UIWebViewDelegate协议来实现. 1 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType

利用WKWebView实现js与OC交互注意事项

最近在写一些关于wkwebview的一些代码,发现了几点心得,记录一下. 1.js调用OC 我是利用wkwebview进行的开发实现,主要代码有三部分 1.向config注入OC对象 [config.userContentController addScriptMessageHandler:self name:@"YHModel" ]; 2.js中书写调用方法: window.webkit.messageHandlers.YHModel.postMessage({ height: $(