㈠ js怎麼跟Android和ios進行交互
與android交互:回
function onBtnClick() {
window.ncp.callOnJs("id");
}
與答objective-c交互:
function onBtnClick(cmd,parameter1)
{
document.write(Date());
document.location="objc://"+callOnJs+":/"+id;
}
㈡ 如何用js調用ios
基本流程:
先看一下Web中,我們給h1標簽添加一個onclick事件,讓它在被點擊之後,修改當前的url。
Web中的HTML代碼:
<html>
<head>
<script>
function getInfo(name)
{
window.location = "/getInfo/"+name;
}
</script>
</head>
<body>
<h1 onclick="getInfo('why')">Name</h1>
</body>
</html>
iOS中,先拖拽WebView,訪問localhost,然後通過WebView的委託事件監聽url跳轉操作,並且把跳轉截取下來。
也就是說,在onclick的時候,普通瀏覽器灰跳轉到那個url,但是在iOS的這個WebView裡面,這個跳轉會被攔截,
用這種方式可以巧妙地實現JS調用iOS的原生代碼:
//
// DWViewController.m
// DareWayApp
//
// Created by why on 14-6-3.
// Copyright (c) 2014年 DareWay. All rights reserved.
//
#import "DWViewController.h"
@interface DWViewController ()
@property (weak, nonatomic) IBOutlet UIWebView *myWebview; // 主頁面
@end
@implementation DWViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 適配iOS6的狀態欄
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
_myWebview.frame = CGRectMake(0,20,self.view.frame.size.width,self.view.frame.size.height-20);
}
// 載入制定的URL
NSURL *url =[NSURL URLWithString:@"http://localhost"];
NSURLRequest *request =[NSURLRequest requestWithURL:url];
[_myWebview setDelegate:self];
[_myWebview loadRequest:request];
}
// 網頁中的每一個請求都會被觸發
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
// 每次跳轉時候判斷URL
if([request.mainDocumentURL.relativePath isEqualToString:@"/getInfo/why"])
{
NSLog(@"why");
return NO;
}
return YES;
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
㈢ (IOS)UIWebView和javaScript之間是怎麼交互的
UIWebView是iOS SDK中渲染網面的控制項,在顯示網頁的時候,可以hack網頁然後顯示想顯示的內容。其中就要用至JavaScript的知識,而UIWebView與javascript交互的 方法就是,有了這個方法可以通過objc調用 javascript,可以注入 javascript
Js調用〇C方法原理就是利用UIWebView重定向請求,傳一些命令到我們的 UIWebView,在UIWebView的delegate的方法中接收這些命令,並根據命令執行相應的objc 方法。這樣就相當於在javascript中調用objc的方法。
擴展: 在android中,有固有組件webview,經過設置可以讓它支持我們的js的渲染,然後在代碼中設置(WebViewClient/WebChromeClient)讓應用跳轉頁面時在本webview中跳 轉,通過webview.loarl (String str)方法可以在需要的地方載入我們前端的頁面或者調用 前端所定義的方法(wv.loadUrl(「javascript:sendDataToAndroid(『我是js,能看到嗎』)」);),再通過JavascriptInterface介面設置前端和android通訊的標識,
wv.addJavascriptInterface(new MJavascriptInterface(getApplicationContext()), 「WebViewFunc」);
這樣前端就可以在頁面上調用我們的方法了,funl方法是在android中定義的 Window.WebViewFunc.fun1 ();
總之,前端和android或者ios進行結合開發,被稱之為混合開發,原理就是在原生的開發語言中,提供了一個組件webview,這個組件就是原生語言的瀏覽器,但是得自行設置讓其能夠完美支持我們的應用,需要設置對應的標識,然後連接起來,稱之為 JavascriptInterfac。
㈣ iOS WKWebView JS 與 原生交互小結
目前iOS項目中 Webview 幾乎都會用到,iOS 8 之前使用UIWebView,iOS 8 之後 Apple 就不推薦使用了,目前已經放棄了,如果項目中存在就無法上架了,需要轉為WKWebView了,說實話 UIWebView 是有性能上的缺陷,內存優化不夠友好等,但是不得不說這是老的iOS開發人員用的最熟練熟悉的了,用起來得心應手。非迫不得已還真不願轉到WKWebView。好吧,既然已經這樣了,又何必苦苦單戀一支花呢?
看了網上教程很多,自己使用小結一下,簡單易用,本文適用於菜鳥級開發,廢話不說了,
最主要的方法:發送消息
注意:對象名和方法名jumpUserProtocol名字的一致,參數可以是常用的NSArray,NSDictionary等類型,先說下在這個Demo中其實沒用上,用的方法名判斷的。
注意: addScriptMessageHandler
name為方法名 ,和JS 中的保持一致,添加腳本,相當於給Webview添加一個監聽,有這個功能來處理JS。
在WKScriptMessageHandler代理方法中處理回調,實現自己的邏輯。
上面就是JS調用OC原生實現。
這個其實很簡單,就一個方法: