1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/hcanyz-ZJsBridge

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
readme.md

ZJsBridge

Это полный набор нативных и веб-протоколов, а также их реализация, которые являются чёткими и понятными для разработки гибридных приложений.

Поддержка API v19+
Поддержка androidx

Реализация на JavaScript: библиотека zfjs-sdk

Что может ZJsBridge

  • Предоставляет SDK для веб-интерфейса, формируя концепцию SDK и унифицируя внешний API приложения, обеспечивая единое управление API (права доступа, совместимость версий).
  • Позволяет компонентам нативного интерфейса иметь возможность использовать API, не объединяя все API в одном модуле.
  • Гарантирует целостность и безопасность данных при взаимодействии между нативным и веб-интерфейсами.

В каких случаях необходимо использовать ZJsBridge

  • Если в проекте много взаимодействий между веб- и нативным интерфейсами и требуется предоставить единый внешний API для нативного интерфейса.
  • Для обеспечения компонентности нативного интерфейса, когда необходимо реализовать логику API в разных модулях.

Стандартный API: документация по zfjs-sdk-api

Протокол моста: Native-Bridge протокол

Виртуальный протокол ресурсов: протокол nativeResourceUrl

Как использовать ((рекомендуется) см. демонстрационный проект)

Добавление зависимостей

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

dependencies {
    implementation 'com.github.hcanyz:ZJsBridge:$version'
}

Классы, требующие изменений

  • Webview (Android, X5...)
  • WebViewClient (добавление некоторых методов вызова для помощи zjs в распознавании жизненного цикла webview)
  • activity|fragment
    • Регистрация класса реализации API
    • Добавление некоторых методов для помощи zjs в распознании жизненного цикла контейнера
WebView реализует IZWebView
class WebView : WebView, IZWebView {

    private val zWebHelper: ZWebHelper by lazy { ZWebHelper(this) }

    override fun getCurUrl(): String {
        return url
    }

    override fun getCurContext(): Context {
        return context
    }

    override fun getCurZWebHelper(): ZWebHelper {
        return zWebHelper
    }

    override fun execJs(methodName: String, params: String?, valueCallback: ValueCallback<String>?): Unit {
        val js: String = if (params.isNullOrBlank()) {
            String.format("%s()", methodName)
        } else {
            String.format("%s('%s')", methodName, params)
        }
        execJs(js, valueCallback)
    }

    override fun execJs(sourceJs: String, valueCallback: ValueCallback<String>?) {
        if (ZJsBridge.ZJS_DEBUG) ZJsBridge.log("evaluateJavascript:javascript:$sourceJs")
        runOnMainThread(Runnable {
            evaluateJavascript("javascript:$sourceJs") { valueCallback?.onReceiveValue(it) }
        })
    }

    override fun runOnMainThread(runnable: Runnable): Unit {
        if (Looper.getMainLooper() == Looper.myLooper()) {
            runnable.run()
            return
        }
        post(runnable)
    }
}
Webview addJavascriptInterface
addJavascriptInterface(ZJavascriptInterface(this), ZJavascriptInterface.INTERFACE_NAME)
WebViewClient
private inner class InnerCustomWebViewClient : WebViewClient() {
    override fun onPageFinished(webView: WebView?, s: String?): Unit {
        super.onPageFinished(webView, s)
        zWebHelper.injectCoreJs()
    }

    override fun doUpdateVisitedHistory(p0: WebView?, p1: String?, p2: Boolean): Unit {
        super.doUpdateVisitedHistory(p0, p1, p2)
        zWebHelper.injectCoreJs()
    }
}
registeredJsApiHandler
web_test.getCurZWebHelper().registeredJsApiHandler(this, ZCommonJsHandler::class.java)
web_test.getCurZWebHelper().registeredJsApiHandler(this, ImageJsHandler::class.java)
activity|fragment контейнер реализует IZWebViewContainer
override fun closeWindow(): Unit {
    finish()
}

override fun updateTitle(title: String): Unit {
    tv_test_tile.text = title
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Unit {
    super.onActivityResult(requestCode, resultCode, data)
    web_test.getCurZWebHelper().dispatchContainerResult(requestCode, resultCode, data)
}

override fun onDetachedFromWindow(): Unit {
    super.onDetachedFromWindow()
    web_test.getCurZWebHelper().dispatchContainerDestroy()
}

override fun onBackPressed(): Unit {
    if (web_test.canGoBack()) {
        web_test.goBack()
    } else {
        super.onBackPressed()
    }
}

Тестирование API

В этой библиотеке есть страница тестирования API h5.

В этом проекте уже интегрирован один из упакованных продуктов, который можно скомпилировать и заменить самостоятельно (ZJsBridge\app\src\main\assets).

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/hcanyz-ZJsBridge.git
git@api.gitlife.ru:oschina-mirror/hcanyz-ZJsBridge.git
oschina-mirror
hcanyz-ZJsBridge
hcanyz-ZJsBridge
master