收藏
回答

鸿蒙小程序 webview 中JSSDKchooseImage permissiondenied?

# 【Bug反馈】鸿蒙系统小程序 webview 中 JSSDK chooseImage 报 permission denied


## 问题类型

- [x] Bug反馈

## 问题平台

- [ ] iOS

- [ ] Android

- [x] 鸿蒙 (HarmonyOS/OpenHarmony)


## 问题分类

- [x] 小程序

- [x] JSSDK

- [ ] 公众号

- [ ] 其他

---

## 问题描述

在微信小程序的 `<web-view>` 组件中加载 H5 页面,通过微信 JSSDK 调用 `wx.chooseImage` API 时,**鸿蒙系统设备**返回 `permission denied` 错误,而 iOS 和 Android 设备运行正常。

### 复现步骤

1. 在鸿蒙系统手机上打开微信

2. 进入小程序,加载包含 webview 的页面

3. H5 页面中通过 JSSDK 调用 `wx.chooseImage`

4. 报错: `chooseImage:permission denied`

### 预期结果

应该能正常打开相机或相册选择图片,与 iOS/Android 行为一致。

### 实际结果

返回错误: `chooseImage:permission denied`

---

## 环境信息

### 鸿蒙设备信息

```

系统版本: OpenHarmony 5.0

浏览器引擎: ArkWeb/4.1.6.1

微信版本: MicroMessenger/8.0.11.34 (0xf3800b22)

小程序 SDK: MMWEBSDK/202509080006

User Agent: Mozilla/5.0 (Phone; OpenHarmony 5.0) AppleWebKit/537.36

(KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36

ArkWeb/4.1.6.1 Mobile miniProgram/wx6c5faa3cd75ec6d6

MicroMessenger/8.0.11.34

```

### 小程序信息

```

小程序基础库版本: 2.19.0

JSSDK 版本: jweixin-1.6.1.js

小程序框架: Remax 2.0.0

```

### 对比测试

| 平台 | 系统版本 | 微信版本 | 测试结果 |

|------|----------|----------|----------|

| iOS | 15.0+ | 8.0.x | ✅ 正常 |

| Android | 10.0+ | 8.0.x | ✅ 正常 |

| 鸿蒙 (OpenHarmony) | 5.0 | 8.0.11.34 | ❌ permission denied |

---

## 代码示例

### 小程序 webview 加载


```tsx

// 小程序页面

import { WebView } from 'remax/wechat';


<WebView src="https://h5-q.example.com/#/home?userId=xxx" />

```


### H5 页面 JSSDK 配置


```javascript

// 1. 加载 JSSDK

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.1.js"></script>


// 2. 获取签名配置

fetch('/api/wx/getWxConfigParams', {

method: 'GET',

params: { url: window.location.href.split('#')[0] }

}).then(data => {

const { appId, timestamp, nonceStr, signature } = data;


// 3. 配置 wx.config

wx.config({

debug: false,

appId: appId, // 公众号 appId

timestamp: timestamp,

nonceStr: nonceStr,

signature: signature,

jsApiList: [

'chooseImage',

'getLocalImgData',

'uploadImage',

'getLocation'

]

});


// 4. ready 回调

wx.ready(() => {

console.log('JSSDK 初始化成功');


// 5. 权限检查

wx.checkJsApi({

jsApiList: ['chooseImage'],

success: function(res) {

console.log('checkJsApi:', res);

// 鸿蒙系统返回: { checkResult: { chooseImage: true } }

// ⚠️ 返回 true,但实际调用失败!

}

});

});


wx.error(function(res){

console.error('config 失败:', res);

});

});


// 6. 调用 chooseImage

function takePhoto() {

wx.chooseImage({

count: 1,

sizeType: ['compressed'],

sourceType: ['camera'],

success: function (res) {

console.log('选择成功:', res);

},

fail: function (error) {

// ❌ 鸿蒙系统在这里失败

console.error('失败:', error);

// 输出: { errMsg: "chooseImage:permission denied" }

}

});

}

```


### 小程序权限配置


```javascript

// app.config.ts / app.json

{

"permission": {

"scope.userLocation": {

"desc": "你的位置信息将用于打卡定位"

},

"scope.album": {

"desc": "需要访问你的相册,用于上传图片"

},

"scope.camera": {

"desc": "需要访问你的相机,用于拍照"

}

},

"requiredPrivateInfos": [

"getLocation",

"onLocationChange",

"chooseAddress",

"choosePoi",

"chooseLocation"

]

}

```


---


## 测试日志


### 完整的控制台输出


```

======== 微信 JSSDK 配置开始 ========

微信配置 - 原始URL: https://h5-q.example.com/#/home?userId=xxx

微信配置 - 签名URL: https://h5-q.example.com/

微信配置 - User Agent: Mozilla/5.0 (Phone; OpenHarmony 5.0)...

微信配置 - 是否鸿蒙系统: true

========================================


✅ wx.config 执行成功

✅ wx.ready 回调触发

✅ wx.checkJsApi 返回: { checkResult: { chooseImage: true } }


--- 调用 wx.chooseImage ---

❌ fail 回调触发

错误信息: {

errMsg: "chooseImage:permission denied"

}

```


---


## 🎯 决定性证据 (关键发现)


### 微信官方 Demo 测试


为了排除我们代码的问题,我们进行了一个关键测试:


**测试方法**: 将微信官方的标准 Demo 页面直接嵌入到我们的小程序 webview 中


```tsx

// 小程序 webview 页面

<WebView src="https://www.weixinsxy.com/jssdk/" />

```


**测试结果**:

```

✅ iOS 设备: 官方 Demo 的 chooseImage 正常工作

✅ Android 设备: 官方 Demo 的 chooseImage 正常工作

❌ 鸿蒙设备: 官方 Demo 的 chooseImage 同样失败!

```


### 测试结论


> **即使是微信官方的标准 Demo,在鸿蒙系统的小程序 webview 中也无法使用 chooseImage API!**


这个测试彻底证明:

1. ✅ 问题与开发者的代码实现无关

2. ✅ 问题与配置方式无关

3. ✅ 问题与签名算法无关

4. ✅ 问题与业务域名配置无关

5. **这是鸿蒙系统微信小程序 webview 环境的系统性兼容问题**


### 证据链


| 测试场景 | iOS | Android | 鸿蒙 | 结论 |

|---------|-----|---------|------|------|

| 我们的实现 |||| 可能是实现问题 |

| **微信官方 Demo** |||| **排除所有人为因素** |

| 官方 Demo (浏览器直接访问) |||| 非 webview 环境正常 |

| 官方 Demo (小程序 webview) |||| **webview 环境问题** |


---


## 问题分析


### 关键发现


1. **wx.config**: 配置成功,debug 模式下显示 "config:ok"

2. **wx.ready**: 回调正常触发

3. **wx.checkJsApi**: 返回 `chooseImage: true` (表示可用)

4. **实际调用**: `wx.chooseImage` 返回 `permission denied`


### 判断依据


- 所有配置检查都通过

- iOS/Android 设备相同代码运行正常

- 仅鸿蒙系统出现此问题

- **`wx.checkJsApi` 返回 true 但实际调用失败,说明存在误判**


### 猜测原因


1. **ArkWeb 引擎兼容性**: 鸿蒙系统使用 ArkWeb 引擎,可能与 JSSDK 的权限验证机制不兼容

2. **权限模型差异**: 鸿蒙的权限模型与 iOS/Android 存在差异,JSSDK 未正确适配

3. **底层 API 实现差异**: ArkWeb 对相机/相册 API 的实现可能与标准浏览器不同


---


## 已尝试的解决方案


### 方案 1: 升级 JSSDK 版本

- 从 jweixin-1.6.0.js 升级到 **jweixin-1.6.1.js**

- 结果: ❌ 问题依旧


### 方案 2: 启用 beta 接口

```javascript

wx.config({

beta: true, // 启用 beta 接口

// ...其他配置

});

```

- 结果: ❌ 问题依旧


### 方案 3: 延迟初始化

```javascript

wx.ready(() => {

setTimeout(() => {

// 延迟 300ms 后再初始化

init();

}, 300);

});

```

- 结果: ❌ 问题依旧


### 方案 4: 手动授权手机权限

- 在鸿蒙手机设置中手动开启微信的相机、存储权限

- 结果: ❌ 问题依旧


### 方案 5: 升级小程序基础库

- 从 2.3.1 升级到 **2.19.0**

- 结果: ❌ 问题依旧


### 方案 6: 完整的 jsApiList

```javascript

jsApiList: [

'scanQRCode',

'getLocation',

'downloadImage',

'chooseImage',

'getLocalImgData',

'uploadImage',

'previewImage'

]

```

- 结果: ❌ 问题依旧


---


## 相关问题


我在社区中看到了类似的问题反馈:

- [web-view,引入jweixin-1.6.0.js, 无法调用相机](https://developers.weixin.qq.com/community/develop/doc/0004cade9d8190cadce23c06b68c00)


该问题反馈者也遇到了鸿蒙设备上 `chooseImage:permission denied` 的问题,但似乎尚未得到官方回复或解决方案。


---


## 期望


1. **官方确认**: 确认这是鸿蒙系统与微信 JSSDK 的兼容性问题

2. **修复计划**: 提供修复时间表或临时解决方案

3. **适配指南**: 发布鸿蒙系统的 JSSDK 适配文档

4. **版本支持**: 在后续版本中完善对鸿蒙系统的支持


---


## 补充信息


### 业务域名配置

- ✅ 小程序后台已配置业务域名: `h5-q.example.com`

- ✅ 公众号已配置 JS 安全域名: `h5-q.example.com`


### 权限授权

- ✅ 小程序已在设置中授予相机、相册权限

- ✅ 手机系统设置中微信的相机、存储权限已开启


### 签名验证

- ✅ 签名算法按照官方文档实现

- ✅ iOS/Android 设备验证签名正确


**提交日期**: 2025-10-16

**问题优先级**: 高 (影响鸿蒙用户使用)

**期望响应时间**: 尽快


---


感谢微信团队的关注和支持! 🙏



回答关注问题邀请回答
收藏

3 个回答

  • 社区技术运营专员--阳光
    社区技术运营专员--阳光
    2025-10-17

    提供下复现方式

    2025-10-17
    有用 1
    回复 4
    • 环
      2025-10-17
      直接把官方的JSSDK demo链接,放到小程序webview里面,在鸿蒙NEXT(5.0+)里面, chooseImage 方法就是不可用的,可以直接复现。
      2025-10-17
      4
      回复
    • 社区技术运营专员--阳光
      社区技术运营专员--阳光
      2025-10-20回复
      已修复 请重试看看
      2025-10-20
      回复
    • 释槐鸟༣
      释槐鸟༣
      2025-11-11
      请问这个是在哪个版本修复的呢,我现在同样的8.0.11也遇到同样的问题
      2025-11-11
      回复
    • 释槐鸟༣
      释槐鸟༣
      2025-11-12回复
      你好楼主,请问您是在哪个版本验证是否修复好的呢,我这边遇到了相同的问题
      2025-11-12
      回复
  • Javen Wei
    Javen Wei
    2025-10-17

    我们也遇到了相同的问题,官方能解释下吗?

    微信小程序中的webview页面使用jssdk无法打开相册和拍照? - 微信开放社区 https://developers.weixin.qq.com/community/develop/doc/0004022f908738e82914ed39a6b000


    2025-10-17
    有用 1
    回复
  • 智能回答 智能回答 本次回答由AI生成
    2025-10-16
    有用
登录 后发表内容