首页 技术 正文
技术 2022年11月15日
0 收藏 737 点赞 4,215 浏览 2163 个字

在IOS开发中有时会用到Object和javaScript相互调用,详细过程例如以下:

1. Object中运行javascript代码,这个比較简单,苹果提供了非常好的方法

– (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script

2. javascript运行过程中返回给Object的数据或者调用Object方法。这个时候就须要用到

UIWebView的地址重定向功能。主要代码例如以下:

(1)创建UIWebView

    webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
webView.delegate = self;
[self.view addSubview:webView];
[self loadWebPageWithString:_url];- (void)loadWebPageWithString:(NSString*)urlString
{
NSURL *url =[NSURL URLWithString:urlString];
NSURLRequest *request =[NSURLRequest requestWithURL:url];
[webView loadRequest:request];
}

(2)实现UIWebView方法

#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSString *urlString = [[request URL] absoluteString];
debuglog(@"urlString = %@",urlString);
NSString *prefix = @"myvideo";
if ([urlString hasPrefix:prefix]) {
NSString *endString = [urlString substringFromIndex:7];
debuglog(@"last urlString = %@",endString); return NO;
} return YES;
}- (void)webViewDidStartLoad:(UIWebView *)webView
{}- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[self excuteJavaScript];
}- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{}- (void)excuteJavaScript
{
NSString *js = @"var video = document.getElementsByTagName('video')[0];setTimeout(getVideo,1000); function getVideo(){ video = document.getElementsByTagName('video')[0];if(video==undefined){setTimeout(getVideo,1000);}else{ video.pause();if(video.src==''){var video = document.getElementsByTagName('source')[0];}document.location = 'myvideo'+ video.getAttribute('src');injectedObject.playVideo(video.getAttribute('src'));}}"; [webView stringByEvaluatingJavaScriptFromString:js];
}

说明例如以下:

(1)在UIWebView载入完网页的时候,即运行到webViewDidFinishLoad代理的时候。运行一段javascript代码。这段代码的作用是获取网页中的视频地址,代码中“ document.location = ‘myvideo’+ video.getAttribute(‘src’); ”这段特别重要,document.location是为了做地址重定向用的,运行完这段javascript代码。接着就会运行

– (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 这个代理方法,当中就会捕获到document.location给出的地址即’myvideo’+
video.getAttribute(‘src’); 。你能够去掉’myvideo’头。就能够得到你须要的东西了。当中’myvideo’是你自定义的一个头。是为了便于解析后面的数据。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,816
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,899