{"_id":"@bingtang-rn/react-native-inappbrowser-nitro","_rev":"2-07209fd42ff29a2d7c18af16398f3c89","name":"@bingtang-rn/react-native-inappbrowser-nitro","dist-tags":{"latest":"3.0.2"},"versions":{"3.0.1":{"name":"@bingtang-rn/react-native-inappbrowser-nitro","version":"3.0.1","keywords":["react-native","harmony","harmonyos","react-native-inappbrowser-nitro"],"license":"MIT","_id":"@bingtang-rn/react-native-inappbrowser-nitro@3.0.1","maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"homepage":"https://gitcode.com/rn_ohos_plugin/react_native_inappbrowser_nitro","dist":{"shasum":"b1b34b7ec7c39d03f441cb93e4902d4b81f57239","tarball":"https://registry.npmjs.org/@bingtang-rn/react-native-inappbrowser-nitro/-/react-native-inappbrowser-nitro-3.0.1.tgz","fileCount":43,"integrity":"sha512-x6IhurtdS05nPjE04ZEz3qZEWQ4OWvdV+6lpoujQqDh9QMvjWdqpQ+whoJOXoAp2LJsVSmSpDzDnKcX3GtbSRQ==","signatures":[{"sig":"MEUCIA53l+c1rltpV2JdU+HClwpvXoCPoZNTp4m+UGiGDK+MAiEAj3S0d7T1d5wcrgFekVsElGIVztc3X7WmpZdL4SwAJNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":79698},"main":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18"},"gitHead":"bea8bcab3af24260fe4043d9da43211f01a88565","harmony":{"alias":"react-native-inappbrowser-nitro","autolinking":{"ohPackageName":"@oh-rn/react-native-inappbrowser-nitro","cppPackageClassName":"InappbrowserNitroPackage","etsPackageClassName":"InappbrowserNitroPackage","cmakeLibraryTargetName":"inappbrowser_nitro"},"codegenConfig":[{"version":1,"specPaths":["./src/specs/v1"]}]},"private":false,"scripts":{"prepare":"echo skip","codegen-lib":"react-native codegen-harmony --cpp-output-path ./harmony/inappbrowser_nitro/src/main/cpp/generated --ets-output-path ./harmony/inappbrowser_nitro/src/main/ets/generated"},"_npmUser":{"name":"luyizouyuan","email":"189605613@qq.com"},"repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_inappbrowser_nitro","type":"git"},"_npmVersion":"11.12.1","description":"适配鸿蒙版本，提供react_native_inappbrowser_nitro组件。","directories":{},"_nodeVersion":"24.15.0","react-native":"./src/index.ts","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.3","metro":"^0.81.0","react":"18.2.0","typescript":"5.0.4","@types/react":"18.2.79","react-native":"0.72.5","@react-native/typescript-config":"0.79.5","@react-native-oh/react-native-harmony-cli":"^0.77.50"},"peerDependencies":{"react-native":">=0.72"},"_npmOperationalInternal":{"tmp":"tmp/react-native-inappbrowser-nitro_3.0.1_1785417878199_0.15089127705741445","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"_id":"@bingtang-rn/react-native-inappbrowser-nitro@3.0.2","dist":{"shasum":"4296f7236ca183b82cfe0fa6f564f80d5d7cf0a8","tarball":"https://registry.npmjs.org/@bingtang-rn/react-native-inappbrowser-nitro/-/react-native-inappbrowser-nitro-3.0.2.tgz","fileCount":43,"integrity":"sha512-mJZzNktWY5dlQIDr64ECi65+lYb5TBSkkBn0SNL9TWwHcsmV1p6mzwvTf3zJauWPRH9uXas7xgjSumL3yTFTNw==","signatures":[{"sig":"MEQCIAj5SVJ1PqrAq/XKK1eYMjtcueErFHJPIGEuXTpDJAd6AiA7kYyX3RraO+B14X6okZq9QNhjH/Vxk6WIlRk0dem1zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAvzCOOnBGbtdvOquulhSd+ibG76TFZyyO76J6/0L0KoAiAmIrxWCnkCMdhw+BZ3N4QBPY3JaV7EMYtVe6NK0dBe9w=="}],"unpackedSize":79973},"main":"./src/index.ts","name":"@bingtang-rn/react-native-inappbrowser-nitro","_from":"file:bingtang-rn-react-native-inappbrowser-nitro-3.0.2.tgz","module":"./src/index.ts","engines":{"node":">=18"},"harmony":{"alias":"react-native-inappbrowser-nitro","autolinking":{"ohPackageName":"@bingtang-rn/react-native-inappbrowser-nitro","cppPackageClassName":"InappbrowserNitroPackage","etsPackageClassName":"InappbrowserNitroPackage","cmakeLibraryTargetName":"inappbrowser_nitro"},"codegenConfig":[{"version":1,"specPaths":["./src/specs/v1"]}]},"license":"MIT","private":false,"scripts":{"prepare":"echo skip","codegen-lib":"react-native codegen-harmony --cpp-output-path ./harmony/inappbrowser_nitro/src/main/cpp/generated --ets-output-path ./harmony/inappbrowser_nitro/src/main/ets/generated"},"version":"3.0.2","_npmUser":{"name":"luyizouyuan","email":"189605613@qq.com"},"homepage":"https://gitcode.com/rn_ohos_plugin/react_native_inappbrowser_nitro","keywords":["react-native","harmony","harmonyos","react-native-inappbrowser-nitro"],"_resolved":"D:\\code\\rn\\npm\\batch\\react_native_inappbrowser_nitro\\bingtang-rn-react-native-inappbrowser-nitro-3.0.2.tgz","_integrity":"sha512-mJZzNktWY5dlQIDr64ECi65+lYb5TBSkkBn0SNL9TWwHcsmV1p6mzwvTf3zJauWPRH9uXas7xgjSumL3yTFTNw==","repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_inappbrowser_nitro","type":"git"},"_npmVersion":"11.12.1","description":"适配鸿蒙版本，提供react_native_inappbrowser_nitro组件。","directories":{},"maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"_nodeVersion":"24.15.0","react-native":"./src/index.ts","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.3","metro":"^0.81.0","react":"18.2.0","typescript":"5.0.4","@types/react":"18.2.79","react-native":"0.72.5","@react-native/typescript-config":"0.79.5","@react-native-oh/react-native-harmony-cli":"^0.77.50"},"peerDependencies":{"react-native":">=0.72"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-inappbrowser-nitro_3.0.2_1790569013832_0.594967919934132"}}},"time":{"created":"2026-07-30T13:24:38.032Z","modified":"2026-09-28T04:16:54.117Z","3.0.1":"2026-07-30T13:24:38.362Z","3.0.2":"2026-09-28T04:16:53.931Z"},"license":"MIT","homepage":"https://gitcode.com/rn_ohos_plugin/react_native_inappbrowser_nitro","keywords":["react-native","harmony","harmonyos","react-native-inappbrowser-nitro"],"repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_inappbrowser_nitro","type":"git"},"description":"适配鸿蒙版本，提供react_native_inappbrowser_nitro组件。","maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"readme":"# @bingtang-rn/react-native-inappbrowser-nitro for HarmonyOS\r\n\r\n本项目基于 [react-native-inappbrowser-nitro](https://github.com/mCodex/react-native-inappbrowser-nitro) 开发，为 React Native 鸿蒙（OpenHarmony）适配版本。如果在使用过程中有任何问题，可以在GitCode提Issue，会及时跟进。issue地址：[issues](https://gitcode.com/rn_ohos_plugin/react_native_inappbrowser_nitro/issues)。\r\n\r\n## 版本对应关系\r\n\r\n| 鸿蒙适配包版本 | 原始库版本 | 支持 RN 版本 | Autolink | 编译 API 版本 |\r\n| ------------ | ---------- | ------------ | -------- | ------------- |\r\n| 见发布记录 | 3.0.1 | 0.72+ | 是 | API17+ |\r\n\r\n## 安装\r\n\r\n```bash\r\nnpm install @bingtang-rn/react-native-inappbrowser-nitro\r\n```\r\n\r\n## 使用\r\n\r\n```tsx\r\nimport {\r\n  open,\r\n  openAuth,\r\n  close,\r\n  closeAuth,\r\n  isAvailable,\r\n  useInAppBrowser,\r\n} from 'react-native-inappbrowser-nitro'\r\n\r\n// Open an in-app browser\r\nconst result = await open('https://github.com', {\r\n  preferredBarTintColor: { base: '#2563EB' },\r\n  preferredControlTintColor: { base: '#FFFFFF' },\r\n  showTitle: true,\r\n  dismissButtonStyle: 'close',\r\n})\r\n\r\n// Open an auth session\r\nconst authResult = await openAuth(\r\n  'https://example.com/oauth',\r\n  'myapp://callback',\r\n  { toolbarColor: { base: '#2563EB' } }\r\n)\r\n\r\n// Use the hook\r\nconst { open, isLoading, error } = useInAppBrowser()\r\n```\r\n\r\n> import 时使用原库名 `'react-native-inappbrowser-nitro'`，而非鸿蒙包名。\r\n\r\n**平台差异**：\r\n- HarmonyOS 使用独立 UIAbility + Web 组件实现，浏览器以全屏 Ability 形式展示\r\n- `isAvailable()` 在 HarmonyOS 上始终返回 `true`\r\n- 部分平台专属选项在 HarmonyOS 上被忽略（详见下方 API_NOTES）\r\n\r\n**权限要求**：\r\n- 需在 `module.json5` 声明 `ohos.permission.INTERNET`\r\n- 需在 example 的 `module.json5` 注册 `BrowserManagerAbility`\r\n- 需在 `EntryAbility.onCreate` 调用 `webview.WebviewController.initializeWebEngine()` 初始化 Web 引擎\r\n\r\n## Link\r\n\r\n| 版本 | 是否支持 Autolink |\r\n|------|------------------|\r\n| 当前版本 | 是 |\r\n\r\n如使用版本支持 Autolink 且工程已接入，可跳过手动配置。\r\n\r\n<details>\r\n<summary>Manual Link 配置</summary>\r\n\r\n> **说明**：本模块需要同时在 C++ 侧和 ETS 侧注册 Package。\r\n\r\n### 1. Overrides RN SDK\r\n\r\n在工程根目录 `oh-package.json5` 添加：\r\n\r\n```json\r\n{\r\n  \"overrides\": {\r\n    \"@rnoh/react-native-openharmony\": \"./react_native_openharmony\"\r\n  }\r\n}\r\n```\r\n\r\n### 2. 引入原生端依赖\r\n\r\n打开 `entry/oh-package.json5`，添加：\r\n\r\n```json\r\n\"dependencies\": {\r\n  \"@bingtang-rn/react-native-inappbrowser-nitro\": \"file:../../node_modules/@bingtang-rn/react-native-inappbrowser-nitro/harmony/inappbrowser_nitro.har\"\r\n}\r\n```\r\n\r\n执行 `ohpm install`。\r\n\r\n### 3. 配置 CMakeLists\r\n\r\n打开 `entry/src/main/cpp/CMakeLists.txt`，添加：\r\n\r\n```cmake\r\nset(OH_MODULES \"${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules\")\r\n\r\nadd_subdirectory(\"${OH_MODULES}/@bingtang-rn/react-native-inappbrowser-nitro/src/main/cpp\" ./inappbrowser_nitro)\r\n\r\ntarget_link_libraries(rnoh_app PUBLIC inappbrowser_nitro)\r\n```\r\n\r\n### 4. 注册 Package（C++ 侧）\r\n\r\n打开 `entry/src/main/cpp/PackageProvider.cpp`，添加：\r\n\r\n```cpp\r\n#include \"InappbrowserNitroPackage.h\"\r\n\r\nstd::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {\r\n    return {\r\n        std::make_shared<InappbrowserNitroPackage>(ctx),\r\n    };\r\n}\r\n```\r\n\r\n### 5. 注册 Package（ETS 侧）\r\n\r\n打开 `entry/src/main/ets/RNPackagesFactory.ets`，添加：\r\n\r\n```typescript\r\nimport { InappbrowserNitroPackage } from '@bingtang-rn/react-native-inappbrowser-nitro/ts';\r\n\r\nexport function createRNPackages(ctx: RNPackageContext): RNPackage[] {\r\n  return [\r\n    new InappbrowserNitroPackage(ctx),\r\n  ];\r\n}\r\n```\r\n\r\n</details>\r\n\r\n## 属性 / API\r\n\r\n| API | 描述 | 参数 | 返回值 | HarmonyOS 支持 |\r\n|-----|------|------|--------|----------------|\r\n| isAvailable | 检测设备是否支持应用内浏览器 | 无 | Promise\\<boolean\\> | ✅ 完全支持（始终返回 true） |\r\n| open | 打开应用内浏览器 | url: string, options?: InAppBrowserOptions | Promise\\<InAppBrowserResult\\> | ⚠️ 部分支持（核心功能完整，部分选项被忽略） |\r\n| openAuth | 打开认证会话 | url: string, redirectUrl: string, options?: InAppBrowserOptions | Promise\\<InAppBrowserAuthResult\\> | ⚠️ 部分支持（核心功能完整，部分选项被忽略） |\r\n| close | 关闭浏览器 | 无 | Promise\\<void\\> | ✅ 完全支持 |\r\n| closeAuth | 关闭认证会话 | 无 | Promise\\<void\\> | ✅ 完全支持 |\r\n| useInAppBrowser | React Hook 封装 | 无 | UseInAppBrowserReturn | ✅ 完全支持（JS 层实现） |\r\n\r\n### 平台差异\r\n- `open`/`openAuth`：HarmonyOS 使用独立 UIAbility + Web 组件，浏览器以全屏窗口展示（等同于 `fullScreen` 模态样式）\r\n- `isAvailable`：HarmonyOS 始终返回 `true`（内置 Web 引擎）\r\n- `close`/`closeAuth`：通过 `terminateSelf()` 终止浏览器 Ability 实现\r\n- 认证流程：通过 `onPageEnd` 拦截匹配 `redirectUrl` 前缀的导航实现\r\n\r\n### 已支持的浏览器选项\r\n| 选项 | 说明 |\r\n|------|------|\r\n| `preferredBarTintColor` | 工具栏背景色（支持 DynamicColor 的 base 字段） |\r\n| `preferredControlTintColor` | 工具栏文字/图标色（支持 DynamicColor 的 base 字段） |\r\n| `toolbarColor` | 工具栏背景色（与 preferredBarTintColor 合并） |\r\n| `showTitle` | 是否显示页面标题 |\r\n| `dismissButtonStyle` | 关闭按钮文字（done/close/cancel） |\r\n| `colorScheme` | 深色/浅色模式（dark/light/system） |\r\n\r\n### 未实现功能\r\n| 选项 | 原因 |\r\n|------|------|\r\n| `readerMode` | HarmonyOS Web 组件无 Reader Mode API |\r\n| `modalPresentationStyle` / `modalTransitionStyle` | 无 UIKit 模态概念 |\r\n| `enableBarCollapsing` | Web 组件无自动折叠工具栏能力 |\r\n| `ephemeralWebSession` | 需额外 WebCookie 管理开发 |\r\n| `enableEdgeDismiss` | 系统级返回手势由系统控制 |\r\n| `enableUrlBarHiding` | Web 组件无自动隐藏 URL 栏能力 |\r\n| `enableDefaultShare` / `shareState` | 无系统分享集成 |\r\n| `animations` | ArkUI 使用属性动画，不支持 XML 动画 |\r\n| `browserPackage` | HarmonyOS 无多浏览器选择概念 |\r\n| `headers` | 需通过 onInterceptRequest 实现，复杂度高 |\r\n| `forceCloseOnRedirection` | 无对应能力 |\r\n| `enablePullToRefresh` | Web 组件下拉刷新行为不同 |\r\n| `enablePartialCustomTab` | 无对应概念 |\r\n\r\n### 使用限制\r\n- 需声明 `ohos.permission.INTERNET`\r\n- 需在应用中注册 `BrowserManagerAbility`（见 Example 的 module.json5）\r\n- 需在 EntryAbility 中初始化 ArkWeb 引擎\r\n\r\n## 快速验证（运行 Example）\r\n\r\n### 前置条件\r\n\r\n| 依赖 | 版本要求 |\r\n|------|----------|\r\n| Node.js | >= 18 |\r\n| DevEco Studio | 5.0+ / 6.0+ |\r\n| HarmonyOS SDK | API 17+ |\r\n\r\n### 运行步骤\r\n\r\n**1. 克隆仓库**\r\n\r\n```bash\r\ngit clone <仓库地址>\r\ncd <仓库目录>\r\n```\r\n\r\n**2. 安装依赖并构建**\r\n\r\n```bash\r\nnpm install --legacy-peer-deps\r\nnpm pack           # 生成 tgz 包（会自动触发 prepare 构建 JS 产物）\r\n```\r\n\r\n**3. 进入 example 目录，安装依赖**\r\n\r\n```bash\r\ncd example\r\nnpm install --legacy-peer-deps\r\n```\r\n\r\n**4. 生成 JS Bundle**\r\n\r\n```bash\r\nnpm run dev\r\n```\r\n\r\n产物：`harmony/entry/src/main/resources/rawfile/bundle.harmony.js`\r\n\r\n**5. 用 DevEco Studio 打开鸿蒙工程**\r\n\r\n- 打开 DevEco Studio\r\n- 选择 `example/harmony` 目录\r\n- 等待 Sync 完成\r\n\r\n**6. 编译并运行 HAP**\r\n\r\n在 DevEco Studio 中点击运行按钮，将 HAP 安装到设备/模拟器。\r\n\r\n> **注意**：Example 中已预置插件依赖和 Package 注册，无需手动配置 Link。\r\n\r\n## 约束与限制\r\n\r\n### 兼容性\r\n\r\n- RNOH: 0.72+\r\n- HarmonyOS SDK: API 17+\r\n- DevEco Studio: 5.0+\r\n\r\n## 遗留问题\r\n\r\n无（或列出已知问题）\r\n\r\n## 开源协议\r\n\r\n本项目基于 [MIT](./LICENSE) 协议，详见 LICENSE 文件。\r\n","readmeFilename":"README.md"}