webview与js的通信

本文详细介绍了在iOS应用中,如何通过Webview加载远程HTML页面、其他文件和PDF,以及如何实现Webview与JavaScript的交互,包括代理方法的使用,如webViewDidStartLoad和webViewDidFinishLoad,以及提供给JavaScript调用的方法,例如打开相机和拨打电话的功能。

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

JS是操作网页的利器,利用好JS才能真正在应用中随心所欲的操作网页。核心方法:stringByEvaluatingJavaScriptFromString

  • (void)viewDidLoad
    {
    [super viewDidLoad];

    [self loadRemoteHTML];
    }强调内容

pragma mark 加载远程的HTML页面

  • (void)loadRemoteHTML {
    NSURL *url = [NSURL URLWithString:@”http://192.168.1.106:8080/MJServer/“];

    self.webView.delegate = self;
    [self.webView loadRequest:[NSURLRequest requestWithURL:url]];
    }

pragma mark 加载其他文件

pragma mark 加载PDF文件

  • (void)loadLocalPDF {
    //[self.webView loadData:<#(NSData )#> MIMEType:<#(NSString )#> textEncodingName:<#(NSString )#> baseURL:<#(NSURL )#>];

    NSURL *url = [NSURL fileURLWithPath:@”/Users/apple/Desktop/第10章-网络.pdf”];

    self.webView.delegate = self;
    [self.webView loadRequest:[NSURLRequest requestWithURL:url]];
    }

pragma mark 加载HTML字符串

  • (void)loadHTMLString {
    NSURL *url = [NSURL fileURLWithPath:@”/Users/apple/Pictures”];
    [self.webView loadHTMLString:@”” baseURL:url];
    }

pragma mark - webview代理方法

  • (void)webViewDidStartLoad:(UIWebView *)webView {
    NSLog(@”开始加载页面”);
    [MBProgressHUD showMessag:@”哥正在帮你加载…” toView:self.view];
    }

  • (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSLog(@”页面加载完毕”);
    [MBProgressHUD hideHUDForView:self.view animated:YES];

    self.backItem.enabled = self.webView.canGoBack;
    self.forawrdItem.enabled = self.webView.canGoForward;

    self.titleItem.title = [self.webView stringByEvaluatingJavaScriptFromString:@”document.title”];

    //[self.webView stringByEvaluatingJavaScriptFromString:@”fn();”];
    }

pragma mark webview每次加载之前都会调用这个方法

当需要在这个UIWebview加载的视图中在点击进入其它h5界面时,也需要在这个方法里面截取url 请求加载界面
// 如果返回NO,代表不允许加载这个请求
- (BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest )request navigationType:(UIWebViewNavigationType)navigationType {
***********************************
NSString *rightUrl = request.URL.absoluteString;
NSRange range = [rightUrl rangeOfString:_urlSuffix];//带?
NSRange range2 = [rightUrl rangeOfString:_urlSuffix2];//不带?
NSRange range3 = [rightUrl rangeOfString:@”?”];
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:@”isQQReloadView”];
if (range3.location == NSNotFound && range.location == NSNotFound) {//没有问号,没有问号后缀
[self.webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:[rightUrl stringByAppendingString:_urlSuffix]]]];
// [self doIfInWebWithUrl:rightUrl];
return YES;
}else if (range3.location != NSNotFound && range2.location == NSNotFound ){//有问号没有后缀
[self.webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:[rightUrl stringByAppendingString:_urlSuffix2]]]];
// [self doIfInWebWithUrl:rightUrl];
return YES;
************************************
// 说明协议头是ios
if ([@”ios” isEqualToString:request.URL.scheme]) {
NSString *url = request.URL.absoluteString;
NSRange range = [url rangeOfString:@”:”];
NSString *method = [request.URL.absoluteString substringFromIndex:range.location + 1];

    SEL selector = NSSelectorFromString(method);

    if ([self respondsToSelector:selector]) {
        [self performSelector:selector];
    }

    return NO;
}

return YES;

}

pragma mark - 提供一个接口方法给JS调用

  • (void)openCamera {
    NSLog(@”打开了照相机”);
    }

  • (void)call {
    NSLog(@”打电话”);
    }

pragma mark - 按钮方法

pragma mark 前进

  • (void)forawrd {
    [self.webView goForward];
    }

pragma mark 后退

  • (void)back {
    [self.webView goBack];
    }
    @end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值