您现在的位置是:首页 > 正文

IOS Object和javaScript相互调用

2024-04-01 06:47:15阅读 2

在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'是你自己定义的一个头,是为了便于解析后面的数据。







网站文章

  • html的浮动作用是什么意思,html中浮动是什么

    html的浮动作用是什么意思,html中浮动是什么

    在HTML中,浮动就是让元素可以向左或向右移动,直到它的外边距碰到其父级的内边距或者是上一个元素的外边距,只需要给元素设置“float:left|right|none|inherit”样式即可。本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。一.什么是浮动(float)?浮动就是让元素可以向左或向右移动,直到它的外边距碰到其父级的内边距或者是上一...

    2024-04-01 06:46:33
  • 多线程&多进程

    一、线程&进程对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。进程是很多资源的集合(进程相当于是一个工厂)。·线程是包含在进程里面的,线程是用来运行干活的,线程就是最小的单位(相当于是工厂里面的工人)· 进程...

    2024-04-01 06:46:26
  • Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月2日-7月8日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月2日-7月8日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(7月2日-7月8日) 本周Silverlight学习资源更新 Silverlight之Window Phone 中SqlCE应用(17) zhaoyu_1979 Silverlight 4系列 +VS2010 + ArcGIS9.3 最短路径分析 wuwangrun

    2024-04-01 06:46:19
  • win10自带计算机应用恢复,win10重置电脑后怎么恢复应用_win10重置后恢复软件的方法...

    win10自带计算机应用恢复,win10重置电脑后怎么恢复应用_win10重置后恢复软件的方法...

    在使用win10操作系统的过程中,我们经常需要通过重置系统来解决一些问题,可是win10重置电脑后怎么恢复应用呢?有许多小伙伴不是很清楚该如何操作,所以对于这一情况,今天系统城小编为大家整理分享的就是...

    2024-04-01 06:46:11
  • Spring Cache 集成 Caffeine实现项目缓存

    Spring Cache 集成 Caffeine实现项目缓存

    一、前言 Spring Cache本身是Spring框架中一个缓存体系的抽象实现,本身不具备缓存能力,需要配合具体的缓存实现来完成,如Ehcache、Caffeine、Guava、Redis等。 二、...

    2024-04-01 06:45:28
  • cookie

    将不同的计算机通过网络应用使用对应的传输介质进行传输物理层、数据链路层、网络层、传输层、会话层、表示层、应用层[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7sSptn...

    2024-04-01 06:45:21
  • 魔兽正式服5区服务器互通信息,《魔兽世界》一区合并服务器正式通告

    为了迎接1.12版本中的跨服务器战场功能,并进一步提升服务器表现以满足用户的需求,我们将对现有服务器的架构进行调整,一区至五区的服务器将进行小规模的服务器合并操作。我们已经从今天凌晨5点开始,对一区的...

    2024-04-01 06:45:14
  • 15HD_OJ——Tian Ji -- The Horse Racing

    15HD_OJ——Tian Ji -- The Horse Racing

    /* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:李晓凯 * 完成日期:2015年 6 月 11 日 * 版 本 号:v1.0 * * 问题描述: * 输入描述: * 程序输出: */ Problem Descriptio

    2024-04-01 06:44:35
  • react 表格高度自适应

    使用calc()给元素的border、margin、pading、font-size和width等属性设置动态值。不过calc()最大的好处就是用在流体布局上,可以通过calc()计算得到元素的宽度。...

    2024-04-01 06:44:19
  • Array.prototype.at()

    Array.prototype.at()

    看到MDN上Array有一个新的函数,但还在实验中,并没有正式开放 实际上在chrome浏览器上new一个数组,也是存在这个函数的。 at的含义就是快速定位数组中的第几项。比如我们不知道一个数组的长度...

    2024-04-01 06:43:40