在iOS开发中,可以使用WKWebView
或UIWebView
来加载HTML字符串,并使用JavaScript与原生代码交互,将HTML字符串转换为NSString
或Swift String
变量。
以下是使用WKWebView
的示例代码:
import WebKit
class ViewController: UIViewController, WKNavigationDelegate {
var webView: WKWebView!
var htmlString: String!
override func viewDidLoad() {
super.viewDidLoad()
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
view.addSubview(webView)
let layoutGuide = view.safeAreaLayoutGuide
webView.translatesAutoresizingMaskIntoConstraints = false
webView.leadingAnchor.constraint(equalTo: layoutGuide.leadingAnchor).isActive = true
webView.trailingAnchor.constraint(equalTo: layoutGuide.trailingAnchor).isActive = true
webView.topAnchor.constraint(equalTo: layoutGuide.topAnchor).isActive = true
webView.bottomAnchor.constraint(equalTo: layoutGuide.bottomAnchor).isActive = true
let htmlContent = "<html><body><p>Hello, World!</p></body></html>"
webView.loadHTMLString(htmlContent, baseURL: nil)
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
webView.evaluateJavaScript("document.body.innerHTML") { (result, error) in
if let result = result as? String {
self.htmlString = result
print(self.htmlString)
}
}
}
}
在上面的代码中,我们创建了一个WKWebView
实例,并使用loadHTMLString
方法加载HTML字符串。在webView(_:didFinish:)
代理方法中,我们使用JavaScript的document.body.innerHTML
属性获取HTML字符串,并将其存储在htmlString
变量中。
需要注意的是,由于JavaScript的执行是异步的,因此我们需要在回调中处理结果。另外,由于HTML字符串可能包含特殊字符,例如<
和>
,因此我们需要使用evaluateJavaScript
方法来执行JavaScript代码,而不是直接使用stringByEvaluatingJavaScriptFromString
方法。
如果您使用的是Objective-C,可以使用以下代码:
#import <WebKit/WebKit.h>
@interface ViewController () <WKNavigationDelegate>
@property (nonatomic, strong) WKWebView *webView;
@property (nonatomic, strong) NSString *htmlString;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
WKWebViewConfiguration *webConfiguration = [[WKWebViewConfiguration alloc] init];
self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:webConfiguration];
self.webView.navigationDelegate = self;
[self.view addSubview:self.webView];
UILayoutGuide *layoutGuide = self.view.safeAreaLayoutGuide;
self.webView.translatesAutoresizingMaskIntoConstraints = NO;
[self.webView.leadingAnchor constraintEqualToAnchor:layoutGuide.leadingAnchor].active = YES;
[self.webView.trailingAnchor constraintEqualToAnchor:layoutGuide.trailingAnchor].active = YES;
[self.webView.topAnchor constraintEqualToAnchor:layoutGuide.topAnchor].active = YES;
[self.webView.bottomAnchor constraintEqualToAnchor:layoutGuide.bottomAnchor].active = YES;
NSString *htmlContent = @"<html><body><p>Hello, World!</p></body></html>";
[self.webView loadHTMLString:htmlContent baseURL:nil];
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
[webView evaluateJavaScript:@"document.body.innerHTML" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
if (result) {
self.htmlString = result;
NSLog(@"%@", self.htmlString);
}
}];
}
@end
在上面的代码中,我们创建了一个WKWebView
实例,并使用loadHTMLString:baseURL:
方法加载HTML字符串。在webView:didFinishNavigation:
代理方法中,我们使用JavaScript的document.body.innerHTML
属性获取HTML字符串,并将其存储在htmlString
变量中。
需要注意的是,由于JavaScript的执行是异步的,因此我们需要在回调中处理结果。另外,由于HTML字符串可能包含特殊字符,例如<
和>
,因此我们需要使用evaluateJavaScript:completionHandler:
方法来执行JavaScript代码,而不是直接使用stringByEvaluatingJavaScriptFromString
方法。
领取专属 10元无门槛券
手把手带您无忧上云