В настоящее время роднойAPP
в основном разделеныIOS
а такжеAndroid
Две категории.IOS
Нечего и говорить, операционная система, созданная Apple исключительно в США, чтобы конкурироватьGoogle
от компанииAndroid
операционная система. какое еще просоMIUI
, выбитьSmartisan OS
Подождите, некоторые из них являются основнымиAndroid
Реконструированный, то есть нижний слой все ещеAndroid
.
Конечно, теперь, когда передняя часть горит, следует следующее.H5
а такжеAPP
взаимодействия становятся более частыми.H5
звонитьAPP
Как работает нативный метод?APP
звонитьH5
Как должен работать метод? Далее мы объясним их один за другим!
H5
а такжеIOS
взаимодействовать
Заявление: Поскольку я не делаю
IOS APP
Он был разработан, поэтому с ним можно ознакомиться только здесьIOS APP
Разработчики, надеюсь вы укажете на ошибки.
из-заIOS APP
разработан сReactiveCocoa
. ЭтоReactiveCocoa
что это такое? ДелатьIOS APP
Студенты, разработавшие его, не должны быть незнакомы, это приложение с открытым исходным кодом Github.IOS
а такжеOS
разработан новый фреймворк,Cocoa
Это аббревиатура полного набора фреймворков Apple, поэтому многие фреймворки Apple любят начинать сCocoa
конец. Для уточнения можно отправиться на исследование.
Далее, наступает момент! !
1. Приложение для настройки H5
IOS APP
/*! @abstract Adds a script message handler.
@param scriptMessageHandler The message handler to add.
@param name The name of the message handler.
@discussion Adding a scriptMessageHandler adds a function
window.webkit.messageHandlers.<name>.postMessage(<messageBody>) for all
frames.
*/
open func add(_ scriptMessageHandler: WKScriptMessageHandler, name: String)
Этот код примерно означает: добавьте метод обработки сценария сообщения, первый переданный параметр — это добавленный метод обработки сообщения, а второй параметр — имя добавленной обработки сообщения.
private (set) lazy var webView: WKWebView = {
//初始化一个 WKWebViewConfiguration
let configuretion = WKWebViewConfiguration()
configuretion.preferences = WKPreferences()
configuretion.preferences.javaScriptEnabled = true
configuretion.preferences.javaScriptCanOpenWindowsAutomatically = false
//在 configuretion.userContentController 注册消息处理方法
configuretion.userContentController = WKUserContentController()
//注册uploadImage方法
configuretion.userContentController.add(self, name: MessageHandlerName.uploadImage.rawValue)
//注册login方法
configuretion.userContentController.add(self, name: MessageHandlerName.login.rawValue)
//注册home方法
configuretion.userContentController.add(self, name: MessageHandlerName.home.rawValue)
//初始化一个 WKWebView 并将配置参数传入
let view = WKWebView.init(frame: .zero, configuration: configuretion)
return view
}()
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
let name = MessageHandlerName.init(rawValue: message.name)
switch name {
case .uploadImage?:
//通过 message.body 获取 h5 传递的参数
if let uploadType = message.body as? String {
imageType = uploadType
}
// do your something
case .login?:
// do your something
case .home?:
// do your something
default:
break
}
}
H5
window.webkit.messageHandlers.zrbCallUpload.postMessage(this.type)
window.webkit.messageHandlers.login.postMessage(true)
window.webkit.messageHandlers.home.postMessage(true)
window.webkit.messageHandlers
APP
Модуль обработки сообщений, зарегистрированный в среде
zrbCallUpload
APP
Зарегистрирован специальный метод прослушивания сообщений
Вызов здесь является обязательным параметром.
2. Приложение настраивает H5
APP
ТунH5
Суть метода заключается в склеивании возвращаемых параметров.
APP
let js = "callUploadHtml(\(JSONString!), \"\(self.imageType!)\")"
self.webView.evaluateJavaScript(js, completionHandler: { (_, _) in
})
Примечание. При передаче здесь строки она должна быть заключена в кавычки, иначе вызов завершится ошибкой.
H5
window.callUploadHtml = function(dataObj, uploadType){
//do your something
};
Уведомление:
- 1,
H5
определениеAPP
Вызываемый метод должен быть вwindow
глобально иначеAPP
не могу позвонить- 2. здесь
H5
Принятый параметр должен быть таким же, какAPP
Существует однозначное соответствие между параметрами, переданными вызовом.
специфическийdemo
Адрес можно посмотреть https://github.com/littleLane/cross_ios_h5
H5 взаимодействует с Android
1. Приложение для настройки H5
APP
webView = (WebView) findViewById(R.id.web_H5Activity);
progressBar = (ProgressBar) findViewById(R.id.progressBar_h5show);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JavaScriptObject(), "postMessage");
APP
Код, установленный сбоку, примерно такой, получитьwebView
затем установитеsetJavaScriptEnabled
дляtrue
, и добавитьaddJavascriptInterface
контролировать, установить глобальныйJavaScript
метод обработкиpostMessage
.
Далее определитеJavaScriptObject
класс и добавьте класс, с которым вы хотите иметь делоJavaScript
Метод для вызова, пример выглядит следующим образом:
class JavaScriptObject {
@JavascriptInterface//上传头像
public void zrbCallUpload(String paramer, String returnFun) {
//do your something
}
@JavascriptInterface//登录
public void zrbLogin(Object paramer) { // TODO: 2018/1/11
//do your something
}
....
}
сюдаAPP
Дело сделано, посмотрим, как с этим справится передок!
H5
window.postMessage.zrbCallUpload(param1, param2);
window.postMessage.zrbLogin(param1);
Две строки кода вышеH5
мелодияAPP
Да, хотя это выглядит очень просто, следует отметить несколько моментов:
-
1,
window
Следующий метод должен бытьAPP
Определенный метод мониторинга, здесьpostMessage
-
2. Метод мониторинга
postMessage
Далее следуют конкретные методы логического вызова.zrbCallUpload
а такжеzrbLogin
-
3. Параметры здесь должны быть такими же, как
APP
Хорошо там, иAPP
Там есть согласованность, будь то количество параметров или тип параметров. (Лучше так, иначе хрен его знает, что пойдет не так)
Приложение настраивает H5
H5
существуетH5
здесь заранее в глобальномwindow
четко определенныйAPP
Способ обратного звонка.
window.callUploadBack = function(params){
// do your something
}
Имя функции здесь должно быть таким же, какAPP
Вызовы согласованы, и передаваемые параметры также должны быть согласованы, будь то количество параметров или тип параметров. (Лучше так, иначе хрен его знает, что пойдет не так)
APP
String js = "javascript:" + returnFun + "(" + params + ");";
webView.loadUrl(js);
-
Имя функции, вызываемой returnFun
-
params возвращаемые параметры
Обычно это решается здесь, вH5
передачаAPP
метод по мере необходимостиAPP
Метод обратного вызова передаетсяAPP
, если не требуетсяAPP
Нет необходимости передавать обратный вызов. Потом,APP
По этому параметру на сплайсинг вызываться обратноH5
изJavaScript
код, как код выше.