【问题标题】:Webview works fine on emulator but not on deviceWebview 在模拟器上运行良好,但在设备上运行良好
【发布时间】:2019-07-19 03:49:12
【问题描述】:

我是原生反应的新手。我正在尝试实现一个混合应用程序,它只在 web 视图中显示指向我的网站的链接并显示推送通知。我使用firebase进行通知。我的应用程序在 android 模拟器上运行良好,但是当我构建 apk 并将其安装在我的应用程序上时,它只显示白屏。我知道该应用程序正在运行,因为我的推送通知系统运行良好。模拟器和我的手机都有Android 9.0。我正在使用来自 react-native 的 webview,而不是来自 react-native-webview 的 webview,这给了我一个警告,不确定这是否相关。

更新:我刚刚检查过,该应用程序在 android 8 设备上运行良好,在 android 9 上它不起作用。

以下是我的 webview 的代码

render() {
return (
    <WebView style = {{ width: Dimensions.get('window').width, height: 
    Dimensions.get('window').height }} useWebKit 
    allowUniversalAccessFromFileURLs mixedContentMode = "always" 
    originWhitelist = {['*']} source = {{ uri: 'https://myurl.com/' 
    }} />    
);}
}

【问题讨论】:

  • 你使用的是哪个版本的 react-native?
  • 我没有看到代码有任何问题。您可以忽略警告。你能试试看你的手机浏览器上是否打开了相同的网址吗?
  • @AnkitDubey React Native 版本 0.59.9
  • @KumarBibek Url 在手机浏览器中运行良好,应用程序在模拟器中运行时也可以正常加载 url,我刚刚检查过,该应用程序在 android 8 设备上运行良好,在 android 9 上它不起作用

标签: android react-native webview react-native-android


【解决方案1】:

我在使用 android 9 时也遇到了同样的问题,但是当我使用这个解决方案时它解决了我的问题

使用这个:

在你的Project/android/app/src/main/res/xml/文件夹中创建一个新文件

并将其命名为 network_security_config.xml

将此代码添加到这个新创建的文件中

<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
     <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config> </network-security-config>

并且在AndroidManifest.xml文件里面应用标签

添加这些行

    android:usesCleartextTraffic="true"       
    android:supportsRtl="true"
    android:hardwareAccelerated="true"
    android:networkSecurityConfig="@xml/network_security_config"

【讨论】: