热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOSUIWebView与JavaScript(js)交互

UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavascriptFromString方法可以将Javascript嵌入页面中&#xff


UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavascriptFromString方法可以将Javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。

stringByEvaluatingJavascriptFromString

使用stringByEvaluatingJavascriptFromString方法,需要等UIWebView中的页面加载完成之后去调用。我们在界面上拖放一个UIWebView控件。在Load中将google mobile加载到这个控件中,代码如下:

- (void)viewDidLoad
{
[super viewDidLoad];
webview.backgroundColor = [UIColor clearColor]; 
webview.scalesPageToFit =YES;
webview.delegate =self;
NSURL *url =[[NSURL alloc] initWithString:@"http://www.google.com.hk/m?gl=CN&hl=zh_CN&source=ihp"];

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
[webview loadRequest:request]; 
}

我们在webViewDidFinishLoad方法中就可以通过Javascript操作界面元素了。

1、获取当前页面的url。

- (void)webViewDidFinishLoad:(UIWebView *)webView {

NSString *currentURL = [webView stringByEvaluatingJavascriptFromString:@"document.location.href"];

2、获取页面title:

NSString *title = [webview stringByEvaluatingJavascriptFromString:@"document.title"];

3、修改界面元素的值。

NSString *js_result = [webView stringByEvaluatingJavascriptFromString:@"document.getElementsByName('q')[0].value='朱祁林';"];

4、表单提交:

NSString *js_result2 = [webView stringByEvaluatingJavascriptFromString:@"document.forms[0].submit(); "];

这样就实现了在google搜索关键字:“朱祁林”的功能。

5、插入js代码

上面的功能我们可以封装到一个js函数中,将这个函数插入到页面上执行,代码如下:

if ([title compare: @"Google"]==NSOrderedSame ) { 

[webView stringByEvaluatingJavascriptFromString:@"var script = document.createElement('script');" 
"script.type = 'text/Javascript';" 
"script.text = \"function myFunction() { " 
"var field = document.getElementsByName('q')[0];" 
"field.value='朱祁林';" 
"document.forms[0].submit();" 
"}\";" 
"document.getElementsByTagName('head')[0].appendChild(script);"]; 

[webView stringByEvaluatingJavascriptFromString:@"myFunction();"]; 
}

看上面的代码:

a、首先通过js创建一个script的标签,type为'text/Javascript'。

b、然后在这个标签中插入一段字符串,这段字符串就是一个函数:myFunction,这个函数实现google自动搜索关键字的功能。

c、然后使用stringByEvaluatingJavascriptFromString执行myFunction函数。

演示:

第一步打开google mobile网站

第二步输入关键字

第三步搜素

总结:这篇文章主要是讲解了stringByEvaluatingJavascriptFromString的用法,它的功能非常的强大,用起来非常简单,通过它我们可以很方便的操作uiwebview中的页面元素。


需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果; 
方法:通过js截获UIWebView中的html,然后修改html标签内容; 
实例代码: 
服务器端html

Java代码  收藏代码
  1.   
  2. "Content-Type" content="text/html; charset=utf-8">  
  3. "viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">   
  4. 网曝四川省一考场时钟慢半小时 老师称这就是命  


这样显示的结果网页的最小宽度会是device-width;但有时候不需要这个宽度,就需要修改width=device-width为width=myWidth; 
客户端代码

Java代码  收藏代码
  1. - (void)webViewDidFinishLoad:(UIWebView *)webView  
  2. {     
  3.     //修改服务器页面的meta的值  
  4.     NSString *meta = [NSString stringWithFormat:@"document.getElementsByName(\"viewport\")[0].content = \"width=%f, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no\"", webView.frame.size.width];  
  5.     [webView stringByEvaluatingJavascriptFromString:meta];  
  6. }  


这样问题就可以解决了 

新增代码: 

Java代码  收藏代码
  1. //给网页增加utf-8编码  
  2.  [webView stringByEvaluatingJavascriptFromString:  
  3.  @"var tagHead =document.documentElement.firstChild;"  
  4.   "var tagMeta = document.createElement(\"meta\");"   
  5.   "tagMeta.setAttribute(\"http-equiv\", \"Content-Type\");"   
  6.   "tagMeta.setAttribute(\"content\", \"text/html; charset=utf-8\");"   
  7.   "var tagHeadAdd = tagHead.appendChild(tagMeta);"];  

 

Java代码  收藏代码
  1. //给网页增加css样式  
  2.     [webView stringByEvaluatingJavascriptFromString:  
  3.      @"var tagHead =document.documentElement.firstChild;"  
  4.      "var tagStyle = document.createElement(\"style\");"   
  5.      "tagStyle.setAttribute(\"type\", \"text/css\");"   
  6.      "tagStyle.appendChild(document.createTextNode(\"BODY{padding: 20pt 15pt}\"));"  
  7.      "var tagHeadAdd = tagHead.appendChild(tagStyle);"];  



Java代码  收藏代码
  1. //拦截网页图片  并修改图片大小        
  2. [webView stringByEvaluatingJavascriptFromString:  
  3.  @"var script = document.createElement('script');"   
  4.  "script.type = 'text/Javascript';"   
  5.  "script.text = \"function ResizeImages() { "   
  6.      "var myimg,oldwidth;"  
  7.      "var maxwidth=380;" //缩放系数   
  8.      "for(i=0;i    
  9.          "myimg = document.images[i];"  
  10.          "if(myimg.width > maxwidth){"   
  11.              "oldwidth = myimg.width;"   
  12.              "myimg.width = maxwidth;"   
  13.              "myimg.height = myimg.height * (maxwidth/oldwidth);"   
  14.          "}"   
  15.      "}"   
  16.  "}\";"   
  17.  "document.getElementsByTagName('head')[0].appendChild(script);"];   
  18.   
  19. [webView stringByEvaluatingJavascriptFromString:@"ResizeImages();"];  
  20. 原地址:http://www.uml.org.cn/mobiledev/201108181.asp


推荐阅读
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 基于Web的Kafka管理工具Kafkamanager首次访问Web界面的详细配置指南(附图解)
    首次访问Kafkamanager Web界面时,需要对Kafka集群进行配置。这一过程相对简单,用户只需依次点击【Cluster】>【Add Cluster】,按照提示完成相关设置即可。本文将通过图文并茂的方式,详细介绍每一步的配置步骤,帮助用户快速上手Kafkamanager。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
author-avatar
莎ss侄莎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有