【发布时间】:2018-05-28 10:18:11
【问题描述】:
我正在使用 React Native 开发适用于 iOS、Android 和 Windows 的应用程序,我需要在其中通过 WebView 显示网页。该网页访问设备的摄像头,因此它使用MediaDevices.getUserMedia() Javascript 函数。
它在桌面上运行没有问题,即使在智能手机上的 Chrome 应用程序中。但是,当我通过 React Native <WebView /> 调用网页时,我收到了 PermissionDenied 错误。问题是没有显示请求让我接受该许可。它只是拒绝请求而不询问。
这是我的 WebView 元素的示例:
<WebView
style={{flex: 1}}
mediaPlaybackRequiresUserAction={false}
domStorageEnabled={true}
allowsInlineMediaPlayback={true}
source={{uri: 'https://myurltomyapp.com/index.html'}}
startInLoadingState={true}
allowUniversalAccessFromFileURLs={true}
/>
我已经在AndroidManifest.xml 上设置了所有必要的权限(甚至有些不是为了测试而需要的):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_SECURE_VIDEO_OUTPUT" />
<uses-permission android:name="android.permission.CAPTURE_VIDEO_OUTPUT" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.RECORD_VIDEO"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
是的,托管网站的 URL 是经过 SSL 认证的,所以它通过 HTTPS。它适用于 Chrome 应用程序,因此它也应该适用于 WebView。
我一直在网上阅读,似乎是因为 React Native WebView 缺少 onPermissionRequest() 实现,所以它默默地失败(并否认它)。
有没有办法在 React Native 中实现它覆盖本机 WebView?如果可能,我必须编辑哪些文件?是否有任何第三方模块(最新)已实现(尚未找到)?
谢谢。
【问题讨论】:
-
你解决了吗?我不使用反应,但试图从 web 视图内部调用
getUserMedia()并且什么都没有...... -
@SamuelMéndez 看到我的答案!希望这对你有帮助!
-
我使用原生 WebView 解决了这个问题。我的问题不是要求用户接受权限,只是调用
request.grant()
标签: android react-native webview android-webview getusermedia