Webview点击二次界面js方法不能响应

来源:互联网 发布:mac上steam游戏装在哪 编辑:程序博客网 时间:2024/05/01 15:03

提出问题:网页定位在app中定位不太准确,这个大家都知道,这就需要我们前端人员定位,通过交互传给后台,包括经纬度,省市区,我刚进入界面的时候需要向后台传一次经纬度,以便他们计算商家的距离展示出来,在这时候需要后台获取一次,当点击webview里面的城市选择的时候,再需要交互一次,后台第二次获取,当你这时候就会发现,第二次获取不会成功,因为后台在页面找不到我们协商的那个方法,但是我们确实前端存在这个方法,很奇怪。

解决方案:

先看看这个代码

JSContext *context = [webviewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    context[@"iOSGetLocation"] = ^()

    {

        NSString *str = [NSStringstringWithFormat:@"%d",arc4random()%100];

        return str;

    };

这段代码就是后台获取我们的参数,其中str就是传的随机数,iOSGetLocation就是约定的方法名
就是这个我们很常见的交互方法我们发现,点击城市选择的时候,后台说找不到这个方法 iOSGetLocation
原因就是我们点击城市选择的时候,这个方法名会消失,所以导致我们都不知道到底是前端的错还是后端的错(如果用这个方法能解决望告知1084493818@qq.com嘿嘿)

我们可以用主动的方式,也就是我们可以去调他们的后台的方法,传参数,类似微信成功后的回调,我们只是回调的时候传参数而已代码如下

    NSString *jsonS = [NSStringstringWithFormat:@"%d",arc4random()%4];

    NSString *javaScriptString = [NSStringstringWithFormat:@"iOSGetLocation('%@')",jsonS];

    

    [webviewstringByEvaluatingJavaScriptFromString:javaScriptString];

这里有个注意的地方:我们按照我写的总能成功,因为我传的是数字,如果你传其它字符串或者其它的东西如json啥的就需要转码,别以为不行,iOSGetLocation就是约定的方法名,jsonS就是传的参数

这个方法对有些公司能解决交互问题,因为他们的端口不多,处理起来可能没那么麻烦,有些公司端口多的,后台不一定能处理,因为要兼顾微信端啥的。

我们所在公司就解决不了,但是是用其它方法解决的,这个方法没有用到特定的交互,我就不分享了。。。

没写过几次博客,写的不好大家谅解



3 0
原创粉丝点击