欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:iOS原生與H5交互方法

柚子快報(bào)激活碼778899分享:iOS原生與H5交互方法

http://yzkb.51969.com/

UIWebView

Objective-C 調(diào)用 JavaScript

在使用UIWebView時(shí),可以使用stringByEvaluatingJavaScriptFromString:方法來執(zhí)行JavaScript代碼。

示例代碼:

NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"returnFunction()"];

NSLog(@"JavaScript返回值: %@", result);

JavaScript 調(diào)用 Objective-C

通過自定義URL scheme實(shí)現(xiàn)。

使用webView的一個(gè)返回BOOL類型的監(jiān)聽網(wǎng)頁的代理:shouldStartLoadWithRequest,在JS中,window.location.href = “hhh://callback” 在監(jiān)聽中監(jiān)聽頭,然后把后面的string截取出來,用SEL變?yōu)楹瘮?shù)名,然后調(diào)用

當(dāng)在JavaScript中需要調(diào)用Objective-C代碼時(shí),可以通過改變window.location來觸發(fā)Objective-C中的代理方法。

示例代碼:

在Objective-C中,你可以在UIWebViewDelegate的webView:shouldStartLoadWithRequest:navigationType:方法中捕獲這些請求:

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

NSURL *URL = [request URL];

if ([[URL scheme] isEqualToString:@"hhh"]) {

NSString *functionName = [URL host]; // 獲取"callback"

SEL selector = NSSelectorFromString([functionName stringByAppendingString:@":"]);

if ([self respondsToSelector:selector]) {

[self performSelector:selector withObject:nil afterDelay:0];

}

return NO;

}

return YES;

}

在JavaScript中,你可以這樣觸發(fā)Objective-C代碼:

window.location.href = "hhh://callback";

建議使用更安全的方式

雖然上述方法可行,但自定義URL scheme方法可能導(dǎo)致安全問題,例如,可能會被惡意利用執(zhí)行未授權(quán)的方法。因此,推薦使用更安全和現(xiàn)代的方法如WKWebView的WKScriptMessageHandler進(jìn)行Native和JavaScript的交互。

注意:UIWebView已經(jīng)被蘋果于棄用,使用會造成審核不通過,推薦使用WKWebView

WKWebView

1. JavaScriptCore

JavaScriptCore是一個(gè)JavaScript引擎,提供了與JavaScript上下文(context)的接口,可以用來執(zhí)行JavaScript代碼和訪問JavaScript對象。JavaScriptCore封裝了一些基礎(chǔ)的JavaScript對象,如Date、Array等,并允許你定義自己的對象和函數(shù)。

原生調(diào)用H5

在Objective-C代碼中執(zhí)行你需要的JavaScript代碼。

示例代碼:

JSContext *context = [[JSContext alloc] init];

// 執(zhí)行JavaScript

[context evaluateScript:@"your javascript code here"];

H5調(diào)用原生

在Objective-C中,可以通過context[@"functionName"]來注冊一個(gè)可以被JavaScript調(diào)用的方法。

示例代碼:

JSContext *context = [[JSContext alloc] init];

// 定義Objective-C block

context[@"log"] = ^(NSString *msg) {

NSLog(@"JS: %@", msg);

};

然后在你的JavaScript代碼中調(diào)用該方法:

log('Hello from JavaScript');

2. evaluateJavaScript和WKScriptMessageHandler

evaluate:評價(jià),評估,估值

evaluateJavaScript:實(shí)現(xiàn)原生調(diào)用H5

使用WKWebView的evaluateJavaScript方法調(diào)用JavaScript代碼,并從中獲取結(jié)果。

示例代碼:

在Objective-C中通過WKWebView調(diào)用JavaScript:

#import

// 假設(shè)self.webView是你的WKWebView實(shí)例

WKWebView *webView = [[WKWebView alloc] init];

// JavaScript代碼字符串

NSString *script = @"document.title";

// 執(zhí)行JavaScript

[webView evaluateJavaScript:script completionHandler:^(id _Nullable result, NSError * _Nullable error) {

if (error) {

NSLog(@"JavaScript執(zhí)行錯(cuò)誤: %@", error);

return;

}

NSLog(@"頁面標(biāo)題: %@", result);

}];

WKScriptMessageHandler:實(shí)現(xiàn)H5調(diào)用原生

WKWebView提供了更現(xiàn)代和功能更強(qiáng)大的接口來與JavaScript交互。evaluateJavaScript:completionHandler:方法可以執(zhí)行JavaScript代碼,并通過回調(diào)接收結(jié)果。你也可以使用WKScriptMessageHandler創(chuàng)建一個(gè)消息處理器,當(dāng)JavaScript通過window.webkit.messageHandlers.YourHandler.postMessage(data)發(fā)送消息時(shí),你可以在Objective-C的userContentController:didReceiveScriptMessage:方法中接收到。

首先在Objective-C中創(chuàng)建消息處理器:

// 在didFinishNavigation代理方法中添加JS調(diào)用OC的方法

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {

// 注冊一個(gè)name為hello的js方法

[webView.configuration.userContentController addScriptMessageHandler:self name:@"hello"];

}

//實(shí)現(xiàn)WKScriptMessageHandler此代理,然后在網(wǎng)頁端通過window.webkit.messageHandlers.hello.postMessage({body: 'test'});即可調(diào)用

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {

NSLog(@"body: %@", message.body);

}

以上就是使用 evaluateJavaScript 來實(shí)現(xiàn)原生調(diào)用H5 WKScriptMessageHandler 來實(shí)現(xiàn)H5調(diào)用原生

3. WKWebViewJavascriptBridge

WKWebViewJavascriptBridge是一個(gè)流行的開源庫,用于在iOS應(yīng)用中的WKWebView和HTML頁面之間進(jìn)行JavaScript與Objective-C或Swift代碼的交互。它提供了一個(gè)簡化的接口來發(fā)送消息和調(diào)用函數(shù),使得原生代碼和Web代碼之間的通信更加便捷。

WKWebViewJavascriptBridge不完全屬于之前提到的三種方法,它實(shí)際上是基于WKWebView的WKScriptMessageHandler封裝而成的一個(gè)橋接工具,但它提供了更加高級和易用的API。

示例代碼:

首先,項(xiàng)目中安裝WKWebViewJavascriptBridge,通常通過CocoaPods安裝:

pod 'WKWebViewJavascriptBridge', '~> 1.0.0'

然后,可以在你的Objective-C代碼中這樣使用它:

#import

#import "WKWebViewJavascriptBridge.h"

@interface ViewController ()

@property (nonatomic, strong) WKWebView *webView;

@property (nonatomic, strong) WKWebViewJavascriptBridge *bridge;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

// 設(shè)置WebView

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

[self.view addSubview:self.webView];

// 初始化bridge

self.bridge = [WKWebViewJavascriptBridge bridgeForWebView:self.webView];

[self.bridge setWebViewDelegate:self];

// 注冊一個(gè)供JS調(diào)用的方法

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

NSLog(@"testObjcCallback called: %@", data);

responseCallback(@"Response from testObjcCallback");

}];

// 調(diào)用JS的方法

[self.bridge callHandler:@"testJavascriptHandler" data:@{ @"foo":@"before ready" }];

// 加載頁面

NSURL *url = [NSURL URLWithString:@"https://example.com"];

[self.webView loadRequest:[NSURLRequest requestWithURL:url]];

}

@end

在你的HTML/JavaScript中,你也需要設(shè)置對應(yīng)的處理函數(shù)和調(diào)用:

// Connect to the Objective-C bridge

document.addEventListener('DOMContentLoaded', function() {

window.WebViewJavascriptBridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {

console.log("ObjC called testJavascriptHandler with", data);

var responseData = { 'Javascript Says':'Right back atcha!' };

responseCallback(responseData);

});

});

這樣,就設(shè)置了一個(gè)雙向通信的橋,可以從JavaScript調(diào)用Objective-C代碼,也可以從Objective-C調(diào)用JavaScript代碼。

柚子快報(bào)激活碼778899分享:iOS原生與H5交互方法

http://yzkb.51969.com/

相關(guān)鏈接

評論可見,查看隱藏內(nèi)容
大家都在看:

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19062261.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄