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

IOS Object和javaScript相互调用的更多相关文章

  1. Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

    IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 dele ...

  2. android与javascript相互调用

    下面这一节来介绍android和javascript是怎么相互调用的,这样我们的UI界面设计起来就简单多了,而且UI设计起来也可以跨平台.现在有好多web app前台框架了,比如sencha和jque ...

  3. Android和JavaScript相互调用的方法

    转载地址:http://www.jb51.net/article/77206.htm 这篇文章主要介绍了Android和JavaScript相互调用的方法,实例分析了Android的WebView执行 ...

  4. 开源项目ScriptGate,Delphi与JavaScript相互调用的神器

    ScriptGate是一个实现TWebBrowser上的JavaScript和Delphi代码相互调用的库,具体在这里:https://bitbucket.org/freeonterminate/sc ...

  5. UIWebView与JavaScript相互调用

    UIWebView与JavaScript的那些事儿 UIWebView是IOS SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页然后显示想显示的内容.其中就要用到javascript的知 ...

  6. Android Webview 和Javascript交互,实现Android和JavaScript相互调用

    在Android的开发过程中.遇到一个新需求.那就是让Java代码和Javascript代码进行交互.在IOS中实现起来很麻烦.而在Android中相对来说容易多了.Android对这种交互进行了很好 ...

  7. Python与Javascript相互调用超详细讲解(2022年1月最新)(一)基本原理 Part 1 - 通过子进程和进程间通信(IPC)

    TL; DR 适用于: python和javascript的runtime(基本特指cpython[不是cython!]和Node.js)都装好了 副语言用了一些复杂的包(例如python用了nump ...

  8. Python与Javascript相互调用超详细讲解(2022年1月最新)(三)基本原理Part 3 - 通过C/C++联通

    目录 TL; DR python调javascript javascript调python 原理 基于Node.js的javascript调用python 从Node调用python函数 V8 嵌入P ...

  9. Python与Javascript相互调用超详细讲解(四)使用PyNode进行Python与Node.js相互调用项(cai)目(keng)实(jing)践(yan)

    目录 前提 安装 使用 const pynode = require('@fridgerator/pynode')的时候动态链接错误 ImportError: math.cpython-39-x86_ ...

随机推荐

  1. Scrapy实战-新浪网分类资讯爬虫

    项目要求: 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 什么是Scrapy框架: Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应 ...

  2. Onenote代码高亮的实现方法

    最终效果图 最终的效果图如下: VBA的编写参考 主要参考的是这篇博客中的思路:如何在Word中排出漂亮的代码 将VBA脚本复制到Word中并设置快捷键 Alt+F11 打开Word中的 VBS,将下 ...

  3. LeetCode 673. Number of Longest Increasing Subsequence

    Given an unsorted array of integers, find the number of longest increasing subsequence. Example 1: I ...

  4. eclipse代码格式化快捷键无法使用

    [产生原因] Ctrl+Shift+F快捷键组合被其他应用占有,如输入法. [解决方案] 关闭或更换其他应用快捷键或更换eclipse对应的快捷键组合.

  5. iptables防火墙简介

    原文地址:http://drops.wooyun.org/tips/1424 一.iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组 ...

  6. IPy模块--IP地址处理

    Python之实用的IP地址处理模块IPy 实用的IP地址处理模块IPy 在IP地址规划中,涉及到计算大量的IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等 别担心,Ipy模块拯救你.Ipy ...

  7. SQL注入与xss

    1. 什么是SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通过递交参数构造巧妙的SQL语句,从而成功获取 ...

  8. rabbitmq php 学习

    参考文档:http://www.cnblogs.com/phpinfo/p/4104551...http://blog.csdn.net/historyasamirror/ar... 依赖包安装 yu ...

  9. "sort open failed +1 no such file or directory"解决方

    GNU的sort也认老式字段规格: +n.m. 但是字段和字符都从0开始计, 例如-k3 -k2可以等效为+2 -3 +1 -2. 目前使用的sort+和-必须成对使用, 只用+就会报错说”sort: ...

  10. 算法复习——凸包加旋转卡壳(poj2187)

    题目: Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest ...