Проект ZWebView — это компонент, адаптированный из OpenHarmony. Он предназначен для создания моста между мобильными приложениями и веб-средой, позволяя осуществлять взаимодействие между ними через контейнер WebView.
Базовая версия: master-ветка.
Состояние переноса: основные функции реализованы.
Различия в вызовах: отсутствуют.
Версия разработки: SDK6, DevEco Studio 2.2 Beta1.
allprojects {
repositories {
maven {
url 'https://s01.oss.sonatype.org/content/repositories/releases/'
}
}
}
dependencies {
implementation('com.gitee.chinasoft_ohos:zwebview:1.0.0')
......
}
В версии SDK6 и DevEco Studio 2.2 Beta1 проект можно запустить напрямую. Если запуск не удаётся, удалите файлы .gradle, .idea, build, gradle и build.gradle и создайте новый проект с учётом вашей версии. Затем скопируйте файлы из нового проекта в корневой каталог.
@Override
public void onInitialize() {
super.onInitialize();
ZWebInstance.init(this);
}
String MAIN_HTML = "xxx.html";
// 1. Создание конфигурации и добавление URL главной страницы
ZWebConfig config = new ZWebConfig.Builder(ZWebConstant.MAIN_HTML)
// Регистрация состояния прослушивания
.setOnStateListener(this)
// Регистрация реализации собственного протокола UI
.setNativeMethodImplement(this)
// Регистрация некоторых специальных методов реализации
// .setOnSpecialStateListener(this)
// Выбор режима инъекции
.setInjectionMode(InjectionMode.VuePlugin)
// Автоматическая инъекция фреймворка JS (рекомендуется)
.autoInjectFramework()
// Автоматическое внедрение расширенных методов
.autoInjectExtendsJS()
// Добавление файлов JS в assets для внедрения
// .addInjectJSAssetsFile("js/test.js")
// Добавление файла JS из raw для внедрения
// .addInjectJSRawFile(R.raw.index_test)
.build();
// 2. Создание экземпляра ZWeb
mZWebInstance = ZWebInstance.createInstance(config);
// mRootView — обязательный корневой компонент Container
@Override
protected void onStart(Intent intent){
//...
mRootView = new StackLayout(this);
mRootView.setLayoutConfig(new ComponentContainer.LayoutConfig(
ComponentContainer.LayoutConfig.MATCH_PARENT,
ComponentContainer.LayoutConfig.MATCH_PARENT));
groupView.addComponent(mRootView);
super.setUIContent(groupView);
//...
}
@Override
public void onBackPressed(){
if (!mZWebInstance.onActivityBack()){
super.onBackPressed();
}
}
// Реализация других жизненных циклов
@Override
protected void onActive() {
mZWebInstance.onActivityResume();
super.onActive();
}
@Override
public void onInactive() {
mZWebInstance.onActivityPause();
super.onInactive();
}
@Override
protected void onBackground() {
mZWebInstance.onActivityStop();
super.onBackground();
}
@Override
protected void onStop() {
mZWebInstance.onActivityDestroy();
super.onStop();
}
При реализации интерфейса состояния необходимо реализовать следующие методы:
/**
* После успешной инициализации фреймворка вызывается обратный вызов
*
* @param zWebHandler
* @param width ширина
* @param height высота
*/
void onZWebCreated(IZWebHandler zWebHandler, int width, int height);
/**
* Вызывается при возникновении исключения в JS
*
* @param zWebHandler
* @param errorCode код ошибки
* @param message сообщение об ошибке
*/
void onZWebException(IZWebHandler zWebHandler, long errorCode, String message);
/**
* Обработка сетевого запроса
*
* @param zWebHandler
* @param url ссылка
* @param method метод запроса
* @param data данные
* @param type тип возврата
* @param controller
*/
void onZWebRequire(IZWebHandler zWebHandler, String url, String method, String data, String type, IZRequireController controller);
/**
* Асинхронный запрос сообщения
*
* @param zWebHandler
* @param cmd команда
* @param data данные
*/
void onZWebMessage(IZWebHandler zWebHandler, String cmd, String data, IZMessageController controller);
/**
* Уничтожение JS
*
* @param zWebHandler
*/
void onZWebDestroy(IZWebHandler zWebHandler);
/**
* Обратный вызов журнала JS, можно записать или распечатать здесь
*
* @param zWebHandler
* @param type тип
* @param msg сообщение
*/
void onZWebLog(IZWebHandler zWebHandler, String type, String msg);
public interface RequireService{
@ZMethod("a") // callReceiver
boolean callA(@ZKey("KeyA") String a, @ZKey("KeyB") String b, @ZKey("Time") long time);
@ZFunction("init")
boolean init(@ZKey("A") String a, @ZKey("B") String b, @ZKey("C") int c);
@ZMethod(ZMethodName.ON_READY)
void initParam(@ZKey("Msg") String msg,
``` **Различные аннотации:**
> @ZFunction("имя метода"): используется для вызова метода расширения `ZWebSDK.extends('имя метода', function(oData){});` в JS.
> @ZMethod("имя прослушивателя"): используется для регистрации метода прослушивания `ZWebSDK.on('имя прослушивателя', function(oData){});` в JS.
> @ZKey("имя параметра"): имя ключа параметра объекта в JS.
> @ZCmd("имя команды"): используется при обратном вызове метода `onZWebMessage`, сопоставление параметров команды. Для конкретного использования см. Demo (используется при анализе и сопоставлении сообщений).
> @ZJson: строка (json) параметра объекта в JS.
> @ZData: параметр является строкой.
2. Создание экземпляра объекта службы интерфейса и вызов:
```java
mRequireService = mZWebInstance.create(RequireService.class);
Используя методы, предоставляемые mRequireService
, вызывается JS следующим образом:
mRequireService.callA("Я стойкое сообщение ...", "Привет, маленький A!", time);
Используя существующий метод void onZWebMessage(IZWebHandler zWebHandler, String cmd, String data, IZMessageController controller);
, анализируйте метод асинхронно и возвращайте результат.
Параметр cmd
: определённое имя команды.
Параметр data
: определённый параметр.
controller
: можно вернуть результат асинхронно или использовать метод controller.parseMessage(this.mParseMessage);
для анализа метода.
В ZWebConfig предоставляется метод setExposedName (String exposedName);
, который позволяет расширить имя протокола интерфейса.
Затем используйте mZWebInstance.addJavascriptInterface(object);
для внедрения метода объекта.
CodeCheck — тестирование кода без исключений. CloudTest — тестирование кода без исключений. Вирусное сканирование — успешно. Текущая версия demo функционально не отличается от исходного компонента.
Copyright 2017 Zyao89
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )