UIWebView与JavaScript的那些事儿

UIWebView是IOS SDK中渲染网面的控件,在显示网页的时候,我们可以hack网页然后显示想显示的内容。其中就要用到javascript的知识,而UIWebView与javascript交互的方法就是stringByEvaluatingJavaScriptFromString:

有了这个方法我们可以通过objc调用javascript,可以注入javascript。

首先我们来看一下,如何调用javascript:

  • [webView stringByEvaluatingJavaScriptFromString:@];

这儿myFunction()就是我们的javascript方法。

再来看看入何注入javascript,我们先写一个需要注入的javascript:

  • );
  • }

保存为test.js,然后拖到xcode 的resource分组下。再用代码在初始化的时候注入这个js(如在viewDidLoad方法里)。

  • NSString *filePath = [[NSBundle mainBundle] pathForResource:@ ofType:@];
  • [webView stringByEvaluatingJavaScriptFromString:jsString];

这样就注入了上面的js,那么我们可以随时调用js的方法,如何调用,上面有介绍。


么我们能不能通过js来调用objc的方法呢。
当然可以,原理就是利用UIWebView重定向请求,传一些命令到我们的UIWebView,在UIWebView的delegate的方法中接收这些
命令,并根据命令执行相应的objc方法。这样就相当于在javascript中调用objc的方法。说起来有点抽象,看看代码一下就明白。

首先我们写一个javascript 方法如下:

  • function
     url=+cmd++param;
  • function
    ,);
  • }

然后在你的html里调用这个js方法 如:

  • <input type= value= /><br/>

最后我们在UIWebVew中截获这个重定向请求:

  • #pragma mark --
    #pragma mark UIWebViewDelegate

    )webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

  • ];
  • ([components count] > 1 && [(NSString *)[components objectAtIndex:0] isEqualToString:@]) {
  • ([(NSString *)[components objectAtIndex:1] isEqualToString:@])
  • , nil];
  • NO;
  • YES;
  • }

看了代码是不是清楚得不能再清楚了呀?  我想phonegap可能与是这样实现的,没去研究过。 不过有一个开源工程大家可以看看,它允许javascript调用objective_c的方法。叫jsbridge-to-cocoa

http://code.google.com/p/jsbridge-to-cocoa/

还有两个相关工程

WebViewJavascriptBridge 与 GAJavaScript 值得大家慢慢研究。

 

最新文章

  1. leetcode-【中等题】5. Longest Palindromic Substring
  2. CentOS7(mini) 急速部署ASP.NET应用
  3. iOS开发之--NSPredicate
  4. window下mysql的1053错误
  5. android开发之如何使TabHost的TabWidget位于屏幕下方
  6. python27+django数据库配置常见问题
  7. JavaScript 之 执行前台函数
  8. Educational Codeforces Round 11 C. Hard Process 前缀和+二分
  9. HTML5要点(二)
  10. 微信45028错误,微信has no masssend quota hint错误
  11. jetty插件配置
  12. git 删除右键菜单
  13. JUC锁机制
  14. ThinkPhp框架:有条件的数据库查询、tp框架的其他知识
  15. 团队作业8----第二次项目冲刺(Beta阶段) 第七天
  16. ( 转 ) CORS 有一次 OPTIONS 请求的原理
  17. CSS中的opacity,不透明度的坑
  18. IntelliJ IDEA 如何设置类头注释和方法注释
  19. Java实现AES加密
  20. 【js字符串当做数组来使用】浪费一晚【想出了3个解决方案】

热门文章

  1. monkey基本命令及脚本编写
  2. Wiki 标记语言(Fitnesse)
  3. React 从入门到进阶之路(六)
  4. 小白使用Web Deploy在vs2015中发布到iis遇到的问题及操作流程
  5. CodeForces Canada Cup 2016【A,B,C,D】
  6. CentOS 6.5 升级gcc到4.8 以及libstdc++
  7. 使用dynamic关键词 CS1969错误
  8. qscoj53(图的m着色问题)
  9. elasticsearch 备份和恢复
  10. Java程序员都应该去使用一下这款强大的国产工具类库