Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(taro-h5): 修复h5的chooseImage API无法动态设置souceType的问题,对齐小程序端 #6101

Merged
merged 1 commit into from
Apr 28, 2020

Conversation

jackie-gan
Copy link

这个 PR 做了什么? (简要描述所做更改)

修复h5的chooseImage API无法动态设置souceType的问题,对齐小程序端

这个 PR 是什么类型? (至少选择一个)

  • 错误修复(Bugfix) issue id #
  • 新功能(Feature)
  • 代码重构(Refactor)
  • TypeScript 类型定义修改(Typings)
  • 文档修改(Docs)
  • 代码风格更新(Code style update)
  • 其他,请描述(Other, please describe):

这个 PR 满足以下需求:

  • 提交到 master 分支
  • Commit 信息遵循 Angular Style Commit Message Conventions
  • 所有测试用例已经通过
  • 代码遵循相关包中的 .eslintrc, .tslintrc, .stylelintrc 所规定的规范
  • 在本地测试可用,不会影响到其它功能

这个 PR 涉及以下平台:

  • 微信小程序
  • 支付宝小程序
  • 百度小程序
  • 头条小程序
  • QQ 轻应用
  • 快应用平台(QuickApp)
  • Web 平台(H5)
  • 移动端(React-Native)

其它需要 Reviewer 或社区知晓的内容:

问题复现代码如下:

  • 1、新建两个页面IndexSecond
// Index页面,sourceType:为['album', 'camera']
import Taro, { Component } from '@tarojs/taro'
import { View, Text, Button } from '@tarojs/components'

export default class Index extends Component {
  render () {
    return (
      <View>
        <Button onClick={() => {
          Taro.chooseImage({
            sourceType: ['album', 'camera']
          });
        }}>选择图片</Button>
        <Button onClick={() => {
          Taro.navigateTo({
            url: '/pages/second/index'
          });
        }}>下一页</Button>
      </View>
    )
  }
}

// Second页面,sourceType为['camera']
import Taro, { Component } from '@tarojs/taro'
import { View, Text, Button } from '@tarojs/components'

export default class Second extends Component {
  render () {
    return (
      <View>
        <Button onClick={() => {
          Taro.chooseImage({
            sourceType: ['camera']
          });
        }}>选择图片</Button>
      </View>
    )
  }
}
  • 2、在小程序端,页面Index可以唤起相册和相机选项;而页面Second可以唤起相机类型;

  • 3、在h5端,表现与小程序端不一致,页面Index可以唤起相册和相机选项;跳转到页面Second不可以唤起相机类型;

  • 4、后来发现,在h5端,还跟打开的页面顺序有关系;如果先打开页面Second,则可以唤起相机类型,但是返回到页面Index就不能唤起相册和相机选项了,只能继续打开相机类型;

  • 5、原因分析:源码中,capture属性在首次设置后,就不能再根据sourceType改变

let taroChooseImageId = document.getElementById(imageId)
if (!taroChooseImageId) {
  let obj = document.createElement('input')
  const sourceTypeString = sourceType && sourceType.toString()
  const acceptableSourceType = ['user', 'environment', 'camera']
  obj.setAttribute('type', 'file')
  obj.setAttribute('id', imageId)
  if (count > 1) {
    obj.setAttribute('multiple', 'multiple')
  }
  // 原因在这
  if (acceptableSourceType.indexOf(sourceTypeString) > -1) {
    obj.setAttribute('capture', sourceTypeString)
  }
  obj.setAttribute('accept', 'image/*')
  obj.setAttribute('style', 'position: fixed; top: -4000px; left: -3000px; z-index: -300;')
  document.body.appendChild(obj)
  taroChooseImageId = document.getElementById(imageId)
}

Copy link
Contributor

@ZakaryCode ZakaryCode left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

感谢贡献

@jackie-gan
Copy link
Author

可以的话,麻烦帮忙合并一下哈,顺便有劳同步到2.x分支,多谢了

@ZakaryCode ZakaryCode merged commit 3368299 into NervJS:master Apr 28, 2020
@ZakaryCode
Copy link
Contributor

已经合并了哈~

@liuchuzhang
Copy link
Contributor

@ZakaryCode 大佬有空把这个 PR 代码同步一下到 next 分支吧,现在我自己搞个文件用这 api 挺恶心的😭

@ZakaryCode
Copy link
Contributor

@ZakaryCode 大佬有空把这个 PR 代码同步一下到 next 分支吧,现在我自己搞个文件用这 api 挺恶心的😭

下次可以自己提个 PR 或者在新的 issue 里面说,比较好跟进 😂

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants