iOS 开发 oc 如何爬取web页面调用的接口

101 阅读2分钟

在iOS开发中,使用Objective-C(OC)爬取Web页面调用的接口,通常涉及到OC与JavaScript(JS)之间的交互。以下是几种常见的实现方法:

1. 通过WebView代理截取网页按钮调用本地代码

通过设置WebView的代理,可以监听网页加载过程中的URL请求,当URL以特定前缀(如"baixun://")开头时,截取后缀作为方法名,调用本地方法实现相应功能。例如,将HTML中的按钮链接修改为"baixun://backuptoindex",即可在网页按钮点击时调用本地方法。

2. 通过JavaScript实现网页与OC交互

  • 拦截按钮点击事件:与上述方法类似,但通过JavaScript直接监听并响应网页按钮的点击事件。
  • 直接调用方法:将本地代码封装成函数,通过JavaScript调用并传递参数,实现更简单的交互。
  • 通过对象调用方法:使用JSExport协议,允许JavaScript调用OC类中的方法。通过创建实现JSExport协议的类,可以定义方法和变量供JavaScript访问。例如,定义一个类TestJSObject,实现TestJSObjectProtocol协议,其中包含不同参数数量的方法,通过JavaScript调用这些方法,传递参数。

3. 使用WKWebView的MessageHandler

WKWebView提供了更现代和高效的方式来进行JS与OC的交互。具体步骤如下:

  1. 在OC端注册方法给JS调用:

self.webConfig = [[WKWebViewConfiguration alloc] init];

self.wkwebview = [[WKWebView alloc] initWithFrame:CGRectZero configuration:self.webConfig];

// 提供方法给js调用

[self.webConfig.userContentController addScriptMessageHandler:self name:@"gotoActive"];

  1. JS调用OC方法传值:

window.webkit.messageHandlers.gotoActive.postMessage({'key': 'value'});

其中gotoActive是OC与JS约定好的方法名,括号里就是写JS给OC传的值,可以传数组、字符串、字典等。

4. 使用WebViewJavascriptBridge

WebViewJavascriptBridge是一个流行的第三方库,简化了JS与OC之间的交互过程。具体步骤如下:

  1. OC端注册方法:

[bridge registerHandler:@"callme" handler:^(id data, WVJBResponseCallback responseCallback) {

NSLog(@"OC端 得到 %@", data);

responseCallback(@"Response from OC");

}];

  1. JS端调用OC方法:

bridge.callHandler('callme', {'blogURL': 'github.com/maying1992 '}, function(response) {

console.log('JS端 得到 response', response);

});

  1. OC调用JS方法:

[self.bridge callHandler:@"factorial" data:@(10) responseCallback:^(id responseData) {

NSLog(@"OC端得到回调 responseData: %@", responseData);

}];

  1. JS端注册方法供OC调用:

bridge.registerHandler('openWebviewBridge', function() {

console.log("openWebviewBridge was called with by ObjC");

});

OC端调用:

[self.bridge callHandler:@"openWebviewBridge" data:nil];

通过以上代码实现了OC与JS的双向调用。

5. 使用JavaScriptCore框架

JavaScriptCore框架允许OC直接执行JS代码,并且可以将OC对象暴露给JS环境。具体步骤如下:

  1. 创建JSContext对象:

JSContext *context = [[self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"] retain];

  1. 将OC对象添加到JSContext中:

context[@"myObject"] = self;

  1. 在JS中调用OC方法:

myObject.myMethod();

这种方式适用于iOS 7及以上版本。

总结

以上方法各有优缺点,选择哪种方法取决于具体的应用场景和需求。对于现代应用开发,推荐使用WKWebView的MessageHandler或WebViewJavascriptBridge,因为它们提供了更简洁和高效的方式来实现JS与OC的交互。