iOS中UIWebView与其中网页的javascript的交互

标签: ios uiwebview 网页 | 发表时间:2015-12-09 17:38 | 作者:
分享到:
出处:http://www.iteye.com

首发: 个人博客,更新&纠错&回复

1.本地语言调js的方式与android中的方式类似,也是向WebView控件发送要调用的js语句
2. 但js调本地语言,则不是像android那样直接调一个全局变量的方法,而是通过location.href=xx://yy这样的方式触发UIWebViewDelegate接口实现者的webView shouldStartLoadWithRequest navigationType方法,该方法应该判断目标路径(即xx://yy)的schema(即xx)是否实际是要调用swift,如果是,则按约定执行之,并返回false阻止网页路径变化,如果不是要调用swift,则返回true,让改网页继续正常加载目标url。
android和iOS对比,它们都用了伪url的技术,但android是在本地语言调js时使用了伪url(该url的schema为javascript),而iOS是js调本地语言时使用了伪url(该url是自定义的标识),这个错落很有意思。
 
 

swift代码:

import UIKit

 

class ViewController: UIViewController, UIWebViewDelegate {

    

    @IBOutlet weak var theWebView: UIWebView!

    

    override func viewDidLoad() {

         //加载本地html

        let res = NSBundle.mainBundle().pathForResource("index",ofType:"html")

        let url = NSURL(fileURLWithPath: res!);

        let request = NSURLRequest(URL: url);

        self.theWebView.loadRequest(request);

        self.theWebView.delegate = self;

    }

    

     //让js可以调用swift

    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {

        //判断是不是js在调用swift,如果是,则处理并返回false

        if(request.URL!.scheme == "myschema"){

            let host = request.URL!.host;

            if(host == "go"){

                let query = request.URL!.query!;

                print(query);

                let split = query.componentsSeparatedByString("=");

                let text = split[1];

                self.theWebView.stringByEvaluatingJavaScriptFromString("changeContent(\"" + text + "\")");

            }

            return false;

        }else{

            return true;

        }

    }

    

     //swift调用js

    @IBAction func btnClicked(sender: AnyObject) { 

        self.theWebView.stringByEvaluatingJavaScriptFromString("changeContent(\"123\")");

    }

}

 

网页代码:

<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

</head>

<body>

    <span id="theSpan"></span>

    <button onclick="doIt()">js调用swift</button>

    <input type="text" id="t">

    <script>

         //让swift可以调用js

        function changeContent(str){

            document.getElementById('theSpan').innerHTML = str;

        }

         //js调用swift

        function doIt(){

            document.location.href = "myschema://go?a=" + document.getElementById("t").value;

        }

    </script>

</body>

 

</html>

长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博: @冷镜,QQ: 908789432


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [ios uiwebview 网页] 推荐:

iOS UIWebView URL拦截

- - 移动开发 - ITeye博客
本文译者: candeladiao,原文: URL filtering for UIWebView on the iPhone. 说明:译者在做app开发时,因为页面的javascript文件比较大导致加载速度很慢,所以想把javascript文件打包在app里,当UIWebView需要加载该脚本时就从app本地读取,但UIWebView并不支持加载本地资源.

iOS中UIWebView与其中网页的javascript的交互

- - ITeye博客
个人博客,更新&纠错&回复. 1.本地语言调js的方式与android中的方式类似,也是向WebView控件发送要调用的js语句. android和iOS对比,它们都用了伪url的技术,但android是在本地语言调js时使用了伪url(该url的schema为javascript),而iOS是js调本地语言时使用了伪url(该url是自定义的标识),这个错落很有意思.

禁用 UIWebView 里面的链接长按弹出效果

- - 张宴的博客
  苹果一直拒绝 UIWebView 内嵌 HTML5 页面的 iPhone、iPad APP应用上架到 App Store,建议这样的APP去做成Safari的Web应用. 但是,苹果的审核人员只从界面、URL去判断是否HTML5的. 有一次,一个 APP应用的URL地址被他们拷贝出来,放到浏览器中能够访问,然后,应用悲催地被拒绝上架了.

iCloud 网页版也开张,迎接 iOS 5 到来!

- ArmadilloCommander - Engadget 中国版
看到上面的图片可不要太兴奋就直接开始输入你的帐密啊. Apple 新一代整合电脑与移动设备的云端服务 iCloud ,虽然还是需要最新版本的 OS X Lion 及才刚上线不久的 iOS 5 才能得到完整支持,但除了于这些装置上使用此云端服务外,您现在还可以使用网页版来让 iCloud 的范围更加延伸.

通过网页进行 iOS 应用内部分发

- - 博客园_首页
介绍如何通过网页内部分发 iOS 应用, 包括 In-House 企业应用和 ad-hoc 测试应用. 用 XCode 打开要分发的项目, 依次选择. "Product" -> "Build for" -> "Archiving", 如下图:.

节节攀升:iOS设备网页浏览市场份额超过65%

- - TECH2IPO创见
根据NetMarketShare 最新的统计数据显示,在所有手机操作系统中,iOS操作系统的网页市场份额已经达到65%,比上个月上升3%,较去年上升15%. 其他竞争对手面对这一数字几乎无力招架,Android的市场份额占到19%,而可怜的BlackBerry只有区区不到2%的市场份额. Apple设备上的Safari浏览器对于其他操作系统的浏览器简直就是秒杀神器.

Android完败 移动网页浏览份额iOS依然绝对优势领先

- - cnBeta.COM
依然是Piper Jaffray公司分析师Gene Munster发布的数据,在过去4周之内,iOS设备占有美国移动网络访问量的63%,Android的份额依然没有太大变化,其他智能手机平台则下降 了2.6%. Munster的数据来自美国最受欢迎的70个网站. 其他智能手机平台,比如微软Windows Phone和黑莓10系统,只能在8%的份额内分得一杯羹,当然这个数字也比4周前前下降了2.6%.

在iOS应用中打开网页,如何改进体验?试试Chrome推出的“一键返回”功能

- - PingWest
目前对于在iOS应用中打开网页这个操作,开发者普遍的解决方案有两个:一是在应用内用Webkit做一个内置浏览器;二是直接将链接导出至本地浏览器打开. 毫无疑问,这两种方式都对用户体验造成了不好的影响. 对于前者,开发者自己设计的浏览器往往不够成熟,渲染能力差;而对于后者,用户从应用中被“送出来”后就暂时不再回到应用了,而且来回切换应用和浏览器十分繁琐.

[IOS]iOS App性能优化

- - 操作系统 - ITeye博客
iOS App的性能关注点. 虽然iPhone的机能越来越好,但是app的功能也越来越复杂,性能从来都是移动开发的核心关注点之一. 我们说一个app性能好,不是简单指感觉运行速度快,而应该是指应用启动快速、UI反馈响应及时、列表滚动操作流畅、内存使用合理,当然更不能随随便便Crash啦. 工程师开发应用时除了在设计上要避免性能“坑”的出现,在实际遇到“坑”时也要能很快定位原因所在.

iOS 5评测

- littlepush - Solidot
Ars Technica的评测认为iOS 5值得升级,当然它也不可避免的存在一些小问题,给用户增添些烦恼. 用户在升级前最好手动备份一下iDevice,确保所有的应用都能转移.