Swift和Javascript交互调用

本文详细介绍了如何在Swift中调用HTML页面上的JavaScript函数,以及如何在HTML页面上接收并处理来自Swift的消息,实现跨平台的交互操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着Hybrid APP的流行,需要我们研究下各类native和html页面互相调用的问题。网上OC的例子很多了,但是Swift的调用案例非常少,在这里写了一下。

一、首先,让我们写一个html页面

index.html

    <script>

        function helloWorld(msg){

            document.getElementById('message').innerHTML=msg;
        }

        function showIOSDialog(msg){

            console.log("show iOS dialog");
            var myJSONObject=new Object();
            myJSONObject.title='iOS';
            myJSONObject.content=msg;

            var JSONString=JSON.stringify(myJSONObject);
            var uri='gap://XXXClass.XXXmethod#'+JSONString;
            window.location=uri;
        }
    </script>

<body>
    <h2>html javascript</h2>
    <div id="message"></div><br>
    <button onclick='showIOSDialog(" i am get from iOS")'>get from iOS</button>
</body>

function helloWorld 是用于swift来进行调用的,目标是在index.html上输出一句话;
function showIOSDialog 用于调用swift的方法,目标是APP内打印出json信息;

var uri='gap://XXXClass.XXXmethod#'+JSONString;
window.location=uri;

这是调用swift的重点,机制类似于向native发送一个消息,native解析出方法等参数,进行对应的处理即可,需要传递的信息放入jsongString内;

二、看看swift的代码

    func webViewDidFinishLoad(webView: UIWebView!) {

        

        println("webView did finish")

        webView.stringByEvaluatingJavaScriptFromString("helloWorld('this is write from iOS')");

       

    }

    

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

        

        var actionType:NSString=request.URL.host!;

        println("\(actionType)")

        var scheme:NSString=request.URL.scheme!;

        println("\(scheme)")

        var fragment:NSString=""

        //let fragment=request.URL.fragment!;

        

        println("webView should start")

        if(scheme=="gap"){

            

            var fragment=request.URL.fragment!;

            println("\(fragment)")

        

        

        }

        return true

    }

func webViewDidFinishLoad通过

webView.stringByEvaluatingJavaScriptFromString("helloWorld('this is write from iOS')"),调用javascript内的方法,输出一句话;

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

当js内的

window.location=uri;
使用后,会触发这一消息,然后

request.URL.host!;

request.URL.scheme!;

request.URL.fragment!;

分别解析出请求的host、协议、附加的string信息,即可!

        




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值