浏览器 "桥" 实现
信息
由于浏览器本身就是 WebView 的完整版,并不存在所谓的 jsBridge。但为了保障业务源码逻辑的统一性,我们在浏览器环境下也模拟出一个 jsBridge 概念。本章将为您详细讲解如何基于 @realsee/jsbridge-x 在您自己的代码中实现浏览器 "桥" 。
@realsee/jsbridge-x 的 jsBridge 都是基于 JSBridgeProtocol 与订阅发布者模式实现的,首先,您需要引入 Subscribe 类以及 JSBridgeProtocol 接口。基于 Subscribe 和 JSBridgeProtocol 创建名为 JSBridgeBrowser 的类。
import { Subscribe } from "@realsee/jsbridge-x/lib/shared-utils/Subscribe";
import { JSBridgeProtocol } from "@realsee/jsbridge-x/lib/typings/JSBridgeProtocol";
import { WebViewEventMap } from "@realsee/jsbridge-x/lib/typings/WebViewEventMap";
export class BrowserJsbridge
  extends Subscribe<WebViewEventMap>
  implements JSBridgeProtocol {
  // 在此撰写所需方法
}接下来,您可以按照 JSBridgeProtocol 接口声明,实现相应方法。
提示
如果您已经安装 @realsee/jsbridge-x ,则可以在 @realsee/jsbridge-x/lib/typings/JSBridgeProtocol.d.ts 声明文件中看到完整的 JSBridgeProtocol 接口声明。
也可以直接点 Interface JSBridgeProtocol 文档说明 查看。
完整示例
import { Subscribe } from "@realsee/jsbridge-x/lib/shared-utils/Subscribe";
import { DeviceInfo } from "@realsee/jsbridge-x/lib/typings/DeviceInfo";
import { OpenWebViewEnum } from "@realsee/jsbridge-x/lib/typings/OpenWebViewEnum";
import { ShareConfig } from "@realsee/jsbridge-x/lib/typings/ShareConfig";
import { UserInfo } from "@realsee/jsbridge-x/lib/typings/UserInfo";
import { WebViewEventMap } from "@realsee/jsbridge-x/lib/typings/WebViewEventMap";
import {
  WebViewState,
  OrientationEnum,
} from "@realsee/jsbridge-x/lib/typings/WebViewState";
import { WebViewTypeEnum } from "@realsee/jsbridge-x/lib/typings/WebViewTypeEnum";
import {
  JSBridgeProtocol,
  JSBridgeReturnType,
} from "@realsee/jsbridge-x/lib/typings/JSBridgeProtocol";
export class JSBridgeBrowser
  extends Subscribe<WebViewEventMap>
  implements JSBridgeProtocol
{
  actionShare(
    shareConfig: Partial<ShareConfig>
  ): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  callAndBackfeed<T>(
    schemeUrl: string
  ): Promise<JSBridgeReturnType<false | T>> {
    return Promise.resolve([false, null]);
  }
  callAndListen<T>(
    schemeUrl: string,
    callback: (data: T) => void
  ): Promise<JSBridgeReturnType<false | (() => void)>> {
    return Promise.resolve([false, null]);
  }
  closeLoading(): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  closeWebView(): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  createCacheProxyUrl(urls: string | string[]): string[] {
    return [];
  }
  detectMicro(): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  getBangsHeight(): Promise<JSBridgeReturnType<number | false>> {
    return Promise.resolve([false, null]);
  }
  getDeviceInfo(): Promise<JSBridgeReturnType<DeviceInfo | false>> {
    return Promise.resolve([false, null]);
  }
  getUserInfo(): Promise<JSBridgeReturnType<UserInfo | false>> {
    return Promise.resolve([false, null]);
  }
  getWebViewState(): Promise<JSBridgeReturnType<WebViewState | false>> {
    return Promise.resolve([false, null]);
  }
  keepScreenLight(enable: boolean): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  loadProgress(progress: number): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  login(): Promise<JSBridgeReturnType<UserInfo | false>> {
    return Promise.resolve([false, null]);
  }
  logout(): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  minimize(): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  openWebView(
    url: string,
    way: OpenWebViewEnum
  ): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  preload(urls: string[]): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  ready(): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  saveImage2Album(base64: string): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  setLeftTopBackButton(enable: boolean): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  setOrientation(
    orientation: OrientationEnum
  ): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  shock(duration: number | undefined): Promise<JSBridgeReturnType<boolean>> {
    return Promise.resolve([false, null]);
  }
  webViewType: WebViewTypeEnum = WebViewTypeEnum.Browser;
}