`
annan211
  • 浏览: 462910 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

js 传值给 IOS

 
阅读更多

定义js方法

function callOC(func,param){
        var iframe = document.createElement("iframe");
        var url= "myapp:" + "&func=" + func;
        for(var i in param)
        {
            url = url + "&" + i + "=" + param[i];
        }
        iframe.src = url;
        iframe.style.display = 'none';
        document.body.appendChild(iframe);
        iframe.parentNode.removeChild(iframe);
        iframe = null;
}


调用js方法

 <a  onclick="callOC('prodId',{'prodId':${pro.prodId}})" ><img class="scrollLoading" src='<ls:photo item="${pro.img}" />'></a>

 

 

OC接收参数

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
 
    NSString *requestString = [[[request URL]  absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ];
    
    if ([requestString hasPrefix:@"myapp:"]) {
        NSLog(@"requestString:%@",requestString);
        //如果是自己定义的协议, 再截取协议中的方法和参数, 判断无误后在这里手动调用oc方法
        NSMutableDictionary *param = [self queryStringToDictionary:requestString];
        NSLog(@"get param:%@",[param description]);
 
        NSString *func = [param objectForKey:@"func"];
        
        if([func isEqualToString:@"callFunc"])
        {
            [self testFunc:[param objectForKey:@"first"] withParam2:[param objectForKey:@"second"]  andParam3:[param objectForKey:@"third"] ];
            
        }
/*
 * 方法的返回值是BOOL值。
 * 返回YES:表示让浏览器执行默认操作,比如某个a链接跳转
 * 返回NO:表示不执行浏览器的默认操作,这里因为通过url协议来判断js执行native的操作,肯定不是浏览器默认操作,故返回NO
 * 
 */
        return NO;
    }
    return YES;
}



- (NSMutableDictionary*)queryStringToDictionary:(NSString*)string {
    NSMutableArray *elements = (NSMutableArray*)[string componentsSeparatedByString:@"&"];
    NSMutableDictionary *retval = [NSMutableDictionary dictionaryWithCapacity:[elements count]];
    for(NSString *e in elements) {
        NSArray *pair = [e componentsSeparatedByString:@"="];
        [retval setObject:[pair objectAtIndex:1]?:@"" forKey:[pair objectAtIndex:0]?@:"nokey"];
    }
    return retval;
}



具体引自  http://www.skyfox.org/javascript-ios-navive-message.html

 请尊重知识,请尊重原创 更多资料参考请见  http://www.cezuwang.com/listFilm?page=1&areaId=906&filmTypeId=1

分享到:
评论

相关推荐

    js与iOS交互.zip

    JavaScript(简称JS)和iOS之间的交互是移动应用开发中的一个重要环节,特别是在混合应用开发中,如React Native或Cordova项目。这种交互使得开发者可以利用Web技术(如HTML、CSS和JavaScript)来创建具有原生iOS...

    ios-传值.zip

    标题"ios-传值.zip"暗示了这个压缩包可能包含一系列关于在iOS应用中传递数据的示例或教程。描述中的"各种代理,block传值"指出主要关注的是两种常见的数据传递机制:代理模式(Delegate)和Block(闭包)。下面我们...

    swift 与 javascript 之间的相互调用及传值

    我们需要在Swift中定义一个WKScriptMessageHandler,然后在JavaScript中通过postMessage方法发送消息给Swift。流程如下: 1. 定义Swift处理函数:创建一个遵循WKScriptMessageHandler协议的类,实现...

    iOS开发教程之WKWebView与JS的交互

    本文将深入讲解如何在iOS应用中使用`WKWebView`与JavaScript进行交互。 首先,为了使用`WKWebView`,需要导入WebKit框架: ```swift #import ``` 然后,初始化`WKWebView`并设置代理。代理的实现至关重要,因为...

    IOS 20个实用例子.zip

    -- 使用Delegate在两个ViewController间传值 -- 内存泄露Demo leaky app -- iOS上拉加载更多的实现 -- iOS视频通话/直播demo -- 数据库操作(使用FMDB) -- iOS图文混排(模仿新浪微博) -- IOS高仿微信聊天对话界面 -...

    多窗口互相传值

    而在iOS开发中,可以利用Delegation、Notification或Block等方式。 3. **使用场景**: - 用户在窗口A中输入数据后,可能需要在窗口B中显示或进一步处理这些数据,如登录窗口和主窗口之间的用户信息传递。 - 应用...

    iOS自己用的几个demo

    1. **传值方法**:在iOS应用中,数据的传递是程序交互的基础。这可能包括通过属性赋值、代理协议、KVO(Key-Value Observing)、通知中心、Block或NSUserDefault等方式。理解这些机制有助于实现视图间的有效通信。 ...

    ios-解析son文件并进行传值.zip

    在iOS开发中,JSON(JavaScript Object Notation)是一种常见的数据交换格式,被广泛用于服务器与客户端之间传递数据。本教程将聚焦于如何解析JSON文件并在iOS应用中进行数据传递,特别是针对列表展示。 首先,我们...

    android js安全的交互

    **JS安全交互**:在传统的Android与JavaScript交互中,可能使用WebView直接执行JavaScript代码,这种方法容易暴露API,可能导致恶意脚本注入。SchemeJsBridge通过在Android端设置安全的拦截器,对来自JavaScript的...

    uniapp与webview之间的相互传值的实现

    在移动应用开发中,uni-app是一个跨端框架,它允许开发者编写一次代码,就能在iOS、Android、H5等多个平台上运行。而Webview是uni-app中用于嵌入HTML5页面的组件,它使得原生应用能够加载和展示网页内容。在uni-app...

    ASP.NET+H5+Zxing+js+sweetalert2 实现手机端和PC端调用摄像头进行二维码扫一扫(已修复错误)

    本程序使用VS2019进行制作,利用ASP.NET+H5+Zxing+js+sweetalert2 实现手机端和PC端调用摄像头进行二维码扫一扫,实现前端采集数据,后端进行分析并向前端传值,pc端可运行,手机端鸿蒙系统,安卓,IOS4.X以上均可...

    cordova自定义插件

    一个Cordova插件通常包含两部分:JavaScript接口和原生平台代码(如Android或iOS)。JavaScript部分是与Web应用交互的接口,而原生代码则负责与设备硬件或系统服务进行通信。在创建自定义插件时,我们需要在`plugin....

    PieChart 饼图

    - JavaScript 库:使用 D3.js、Chart.js、Google Charts 或者 ECharts 等JavaScript库,可以方便地在网页上创建交互式饼图。这些库提供了丰富的API和自定义选项,可以调整颜色、字体、动画效果等。 - Python 数据...

    vue使用微信扫一扫功能的实现代码

    在`goSao`方法中,首先检查当前设备是iOS还是Android,然后根据设备类型获取URL。之后,向后端发送请求以获取签名数据(包括appId、timestamp、nonceStr和signature)。 ```javascript import wx from 'weixin-js-...

    程序间跳转

    3. 传值:在iOS中,可以通过`prepare(for:sender:)`方法传递数据给目标视图控制器。在触发segue之前,系统会先调用这个方法,可以在其中设置`destination`的属性。 三、Android中的程序间跳转 1. Intent:在...

    SelectCity

    "代理传值"指的是使用JavaScript的Proxy对象来拦截并控制对象的访问。在这个场景下,可能创建一个Proxy对象来包装城市选择器,当用户选择城市时,通过Proxy捕获这个动作并转发给其他部分的代码,比如将选择结果发送...

    vue使用微信扫一扫

    vue使用微信扫一扫 第一步: 安装weixin-js-sdk 和 jquery 包 npm install weixin-js-sdk jquery 第二部: 配置wx.config (配置都是后端返回... //(兼容安卓和ios) let url = 传值; let ua = navigator.userAgent.t

Global site tag (gtag.js) - Google Analytics