iOS UIWebView Javascript - 插入数据 - 接收回调

iosJava

1个回答

写回答

BRyan123

2025-06-18 13:35

+ 关注

IOS
IOS

使用UIWebView在IOS应用程序中加载网页是很常见的需求。在某些情况下,我们可能需要通过JavaScript将数据插入到加载的网页中,并且希望能够接收来自网页的回调。本文将介绍如何在UIWebView中实现这一功能,并提供相应的案例代码。

插入数据

首先,我们需要在UIWebView中执行JavaScript代码来插入数据。可以通过webView的stringByEvaluatingJavaScriptFromString:方法来实现。该方法接受一个JavaScript代码字符串作为参数,并执行该代码。在这个JavaScript代码中,我们可以使用document对象来访问网页的DOM结构,并通过DOM操作来插入数据。

例如,假设我们有一个UIWebView加载了一个包含一个id为"content"的div元素的网页。我们可以使用下面的代码来插入数据到这个div中:

objective-c

NSString *data = @"Hello, World!";

NSString *JavascriptCode = [NSString stringWithFormat:@"document.getElementById('content').innerHTML = '%@';", data];

[webView stringByEvaluatingJavaScriptFromString:JavascriptCode];

上述代码将会将字符串"Hello, World!"插入到id为"content"的div元素中。

接收回调

接下来,我们将介绍如何在UIWebView中接收来自网页的回调。为了实现这一功能,我们需要通过JavaScript代码调用WebView的JavaScript函数,并在Objective-C代码中实现这个JavaScript函数的回调。

首先,我们需要在Objective-C代码中实现一个JavaScript函数的回调方法。这可以通过UIWebViewDelegate协议的webView:shouldStartLoadWithRequest:navigationType:方法来实现。在这个方法中,我们可以检查请求的URL,判断是否是我们事先定义好的JavaScript回调函数的URL。如果是的话,我们可以获取回调函数的参数,并进行相应的处理。

以下是一个示例代码,演示了如何在UIWebView中接收来自网页的回调:

objective-c

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

NSString *requestString = [[request URL] ABSoluteString];

if ([requestString hasPrefix:@"myapp://callback"]) {

// 提取回调函数的参数

NSString *callbackParameters = [requestString substringFromIndex:16];

// 进行相应的处理

NSLog(@"Received callback with parameters: %@", callbackParameters);

// 返回NO,阻止UIWebView加载请求

return NO;

}

// 允许UIWebView加载请求

return YES;

}

在网页中,我们可以通过以下方式来调用这个JavaScript回调函数:

Javascript

window.location.href = 'myapp://callback?param1=value1¶m2=value2';

上述代码将会触发UIWebViewDelegate的回调方法,并将"param1=value1¶m2=value2"作为参数传递给这个方法。

示例代码

下面是一个完整的示例代码,演示了如何在UIWebView中插入数据并接收来自网页的回调:

objective-c

@interface ViewController () <UIWebViewDelegate>

@property (nonatomic, strong) UIWebView *webView;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];

self.webView.delegate = self;

[self.view addSubview:self.webView];

NSString *htmlString = @"<html><body><div id='content'></div></body></html>";

[self.webView loadHTMLString:htmlString baseURL:nil];

}

- (void)insertDatAIntoWebView {

NSString *data = @"Hello, World!";

NSString *JavascriptCode = [NSString stringWithFormat:@"document.getElementById('content').innerHTML = '%@';", data];

[self.webView stringByEvaluatingJavaScriptFromString:JavascriptCode];

}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

NSString *requestString = [[request URL] ABSoluteString];

if ([requestString hasPrefix:@"myapp://callback"]) {

// 提取回调函数的参数

NSString *callbackParameters = [requestString substringFromIndex:16];

// 进行相应的处理

NSLog(@"Received callback with parameters: %@", callbackParameters);

// 返回NO,阻止UIWebView加载请求

return NO;

}

// 允许UIWebView加载请求

return YES;

}

@end

通过上述代码,我们可以在UIWebView中加载一个简单的网页,并在其中插入数据。同时,我们还可以接收来自网页的回调,并进行相应的处理。

本文介绍了如何在UIWebView中使用JavaScript插入数据并接收来自网页的回调。通过执行JavaScript代码和实现UIWebViewDelegate协议的回调方法,我们可以在IOS应用程序中与加载的网页进行交互。这种技术可以帮助我们在移动应用中实现更丰富的功能和用户体验。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号