uiwebview中html中用js调用oc方法及oc执行js代码

刚刚888      2022-02-08     695

关键词:

HTML代码:
<html>
    <head>
        <title>HTML中用JS调用OC方法</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        [removed]
            function openAlbum()
            {
                // 打开相册(openMyAlbum为OC中的方法)
                [removed].href = ios://openMyAlbum;
            }
            function openCamera()
            {
                // 打开相机(openMyCamera为OC中的方法)
                [removed].href = ios://openMyCamera;
            }
        [removed]
    </head>
    <body>
        <br/>
        <br/>
        <br/>
        <input type="button" value="打开相机"> <br><br/>
        <input type="button" value="打开相册"> 
    </body>
</html>


OC代码:
#import "ViewController.h"

@interface ViewController ()<UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webview;
- (IBAction)getTitle;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"test.html" withExtension:nil];
    [self.webview loadRequest:[NSURLRequest requestWithURL:url]];
    self.webview.delegate = self;
    self.webview.dataDetectorTypes = UIDataDetectorTypeAll;
}

#pragma mark UIWebViewDelegate方法
/**
 *开始加重请求拦截
 */
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{

    NSString *urlstr = request.URL.absoluteString;
    NSRange range = [urlstr rangeOfString:@"ios://"];
    if (range.length!=0) {
        NSString *method = [urlstr substringFromIndex:(range.location+range.length)];
        SEL selctor = NSSelectorFromString(method);
        [self performSelector:selctor withObject:nil];
    }
    return YES;
}
/**
 *  OC执行JS代码
 */
- (IBAction)getTitle {
    
    [self.webview stringByEvaluatingJavaScriptFromString:@"alert(document.title);"];
}

-(void)openMyAlbum
{
    UIImagePickerController *vc = [[UIImagePickerController alloc]init];
    vc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [self presentViewController:vc animated:YES completion:nil];
}

-(void)openMyCamera
{
    UIImagePickerController *vc = [[UIImagePickerController alloc]init];
    vc.sourceType = UIImagePickerControllerSourceTypeCamera;
    [self presentViewController:vc animated:YES completion:nil];
}

@end

 

ios下js与oc互相调用--uiwebview拦截url

....csdn.net/u011619283/article/details/52135977 最近准备把之前用UIWebView实现的JS与原生相互调用功能,用WKWebView来替换。顺便搜索整理了一下JS与OC交互的方式,非常之多啊。目前我已知的JS与OC交互的处理方式: *1.在JS中做一次URL跳... 查看详情

uiwebview中js与oc交互webviewjavascriptbridge的使用

...。二、原理  在iOS中,本地调用Javascript语言,是通过UIWebView中的实例方法stringByEvaluatin 查看详情

如何在ios平台上使用js直接调用oc方法

...2、将此html文件放到项目代码目录里面,如图:3、拖一个UIWebView控件和UIButton控件到xxxViewController对应的.xib或.storyboard视图的UIView上;在xxxViewController的.h文件中分别声明UIWebView类型变量和UIButton类型的变量,以及一个按钮点击事... 查看详情

如何在ios平台上使用js直接调用oc方法

...2、将此html文件放到项目代码目录里面,如图:3、拖一个UIWebView控件和UIButton控件到xxxViewController对应的.xib或.storyboard视图的UIView上;在xxxViewController的.h文件中分别声明UIWebView类型变量和UIButton类型的变量,以及一个按钮点击事... 查看详情

iosjs和oc交互/js和native相互调用

现在app上越来越多需求是通过UIWebView来展示html或者html5的内容,js和nativeOC代码交互就非常常见了.js调用native OC代码第一种机制(1)最常用的是利用-(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UI 查看详情

ios下js与oc互相调用--wkwebview拦截url

在第一篇文章 iOS下JS与OC互相调用(一)中讲述了使用UIWebView拦截URL的方式来处理JS与OC交互。由于UIWebView比较耗内存,性能上不太好,而苹果在iOS8中推出了WKWebView。同样的用WKWebView也可以拦截URL,做JS与OC交互。关于WKWebView与U... 查看详情

iosjs交互之利用系统jscontext实现js调用oc方法

 iosjs交互分为两块:1.oc调用js 这一块实现起来比较简单,我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择拷贝到工程中,(拖入的文件夹是蓝色的,相对路径),不然css,js的路径... 查看详情

iosjs交互之利用系统jscontext实现js调用oc方法

iosjs交互分为两块:1.oc调用js 这一块实现起来比较简单,我的项目中加载的是本地的html,js,css,需要注意的是当你向工程中拖入这些文件时,选择如下操作,(拖入的文件夹是蓝色的,相对路径),不然css,js的路径会存在问... 查看详情

ios怎么实现点击webview按钮调用oc代码

参考技术A每次点击网页中的按钮都会刷新UIWebView,并且会走-(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRequest*)requestnavigationType:(UIWebViewNavigationType)navigationType;这个代理方法里面可以判断那条链接,来判断点击了哪个按钮... 查看详情

转载--基于原生js与oc方法互相调用并传值(附html代码)

...户端,也就是js交互,其实再说明白一点就是方法的互相调用而已。本文叙述下如何进行原生的JavaScript交互本文包括JS调用OC方法并传值,OC调用JS方法并传值本来想把html放进服务器里面,然后访问,但是觉得如果html在本地加载... 查看详情

oc与js的交互(ios与h5混编)

...移动端与H5混编的使用场景。iOS中加载html网页,可以使用UIWebView或WKWebView.本篇博客将介绍两种控件使用过程中如何实现OC与JS的交互。UIWebViewdelegate协议方法//网页即将开始加载-(BOOL)webView:(UIWebView*)webViewshouldStartLoadWithRequest:(NSURLRe... 查看详情

使用 UIWebView 从 HTML 代码调用目标 c 代码中的方法

】使用UIWebView从HTML代码调用目标c代码中的方法【英文标题】:InvokemethodinobjectiveccodefromHTMLcodeusingUIWebView【发布时间】:2013-03-1008:39:00【问题描述】:我的iOS应用中有.html文件。HTML文件几乎没有带有onClick方法的div块。当我点击这... 查看详情

javascript和ios交互遇到的坑

...地方法自然就失效了。如果我们在-(void)webViewDidFinishLoad:(UIWebView )webView方法中注入JS,看起来貌似可以解决重定向之后调用失效的问题,因为webView每次加载完成后都会回调-(void)webViewDidFinishLoad:(UIWebView )webView,也就是... 查看详情

如何在ios平台上使用js直接调用oc方法

  在Cocos2d-JSv3.0RC2中,与Android上js调用Java一样,Cocos2d-JS也提供了在iOS和Mac上js直接调用Objective-C的方法,示例代码如下:  1varojb=jsb.reflection.callStaticMethod(className,methodNmae,arg1,arg2,.....);  在jsb.reflection.callStaticMethod方法中,我... 查看详情

在 UIWebview 的 didStartLoad 方法中注入 JS

】在UIWebview的didStartLoad方法中注入JS【英文标题】:InjectingJSinUIWebview\'sdidStartLoadmethoad【发布时间】:2015-01-0810:29:06【问题描述】:在我的UIWebView中注入javascript时遇到一个奇怪的问题。我能够将JS字符串注入UIWebViewwebViewDidStartLoad... 查看详情

js与原生oc/swift相互调用总结(代码片段)

代码地址如下:http://www.demodashi.com/demo/12754.htmlJS-OC-SwiftJS和OC/Swift相互调用,主要总结了JS和OC交互的三种方式1.使用UIWebView,利用JavaScriptCore实现2.使用WKWebView,利用WKScriptMessageHandler实现3.使用第三方框架WebViewJavascriptBridge实现部分效 查看详情

UICollectionViewCell里面的UIWebView不调用Delegate方法

】UICollectionViewCell里面的UIWebView不调用Delegate方法【英文标题】:UIWebViewinsideUICollectionViewCelldoesnotcallDelegateMethod【发布时间】:2013-01-1314:54:57【问题描述】:我目前正在UICollectionViewCell中嵌入UIWebView,以便能够查看驻留在本地数据... 查看详情

iOS:在 UIWebview 中使用 javascript 调用 obj-c 方法

】iOS:在UIWebview中使用javascript调用obj-c方法【英文标题】:iOS:callobj-cmethodsusingjavascriptinaUIWebview【发布时间】:2013-01-2209:09:14【问题描述】:我正在编写一个与JS网页协作的函数。我使用UIWebView来包含网页,然后当我希望网页与... 查看详情