? ? ? ? 現(xiàn)在越來(lái)越多的伴网,app 會(huì)采用混合開(kāi)發(fā)逃沿,開(kāi)發(fā)速度快還靈活多變透揣,當(dāng)年寫(xiě)的時(shí)候也是挺費(fèi)勁的济炎,領(lǐng)導(dǎo)扔過(guò)來(lái)個(gè)demo ,是采用reload html頁(yè)面 -(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 方法抓url 的方式來(lái)做的 辐真,話說(shuō)這種方式很久之前和同事搞過(guò)须尚,h5的同事弄死我的心都有了,所以我對(duì)領(lǐng)導(dǎo)大人說(shuō):“哇塞侍咱!真厲害耐床,人家會(huì)好好研究的”。領(lǐng)導(dǎo)說(shuō):“好好學(xué)習(xí)楔脯,小伙子有前途無(wú)量啊”撩轰。
? ? ?然而,那個(gè)同事和我關(guān)系還不錯(cuò)昧廷,為了他的生命堪嫂,我又找方法,終于發(fā)現(xiàn)JavaScriptCore 這個(gè)屌啊木柬。
? ? ?先說(shuō)用的最重的JSContext 皆串,JSContext是JavaScript的執(zhí)行環(huán)境。所有JavaScript執(zhí)行上下文內(nèi)進(jìn)行,所有JavaScript值與一個(gè)上下文弄诲。
? ? 首先要先獲取 webview 的 js 執(zhí)行環(huán)境?
? JSContext*context = [webV valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
然后注入和h5約定好的方法名 (此處最是痛心愚战,h5調(diào)用android是可以直接調(diào)用方法的,iOS調(diào)用方法是字符串齐遵,字符串寂玲,字符串)
context[@"Apptodo"] = ^() {
NSArray*args = [JSContext currentArguments]; /// 獲取h5 傳參
if((NSNull*)args == [NSNull null]){
? ? ?return;
?}
(我們做的傳參全是JSON 格式)
NSString*strmethod = [NSStringstringWithFormat:@"%@",[args lastObject]];
NSString*strJson = [NSStringstringWithFormat:@"%@",strmethod];
//解析關(guān)鍵字執(zhí)行動(dòng)作
[self ToPerformActionCodeForJson:strJsonTarget:targetWebView:webV];
};
-(void)ToPerformActionCodeForJson:(NSString*)strJson Target:(id)target WebView:(UIWebView*)webV
{
NSData*JSONData = [strJsondataUsingEncoding:NSUTF8StringEncoding];
NSDictionary*dicmethod = [NSJSONSerialization JSONObjectWithData:JSONDataoptions:NSJSONReadingMutableLeaveserror:nil];
NSString*strAction = [NSString stringWithFormat:@"%@",[dicmethodobjectForKey:@"action"]];
/// 判斷action 后執(zhí)行動(dòng)作
if([strActionisEqualToString:@"goback"]) {
///[self goBack:strActionTarget:targetWebView:webVArgs:strArgs];
?}
}
再然后 iOS 調(diào)用 js?
JSContext*contex1t=[webVvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString*alertJS = [NSStringstringWithFormat:@"%@",@"onVisible"] ;//準(zhǔn)備執(zhí)行的js代碼
[contex1tevaluateScript:alertJS];
沒(méi)了 。梗摇。拓哟。。伶授。 相當(dāng)簡(jiǎn)單
最后祝我萬(wàn)事如意断序,明天就有美女像我表白。