为啥 android webView 不支持 webSocket?

Posted

技术标签:

【中文标题】为啥 android webView 不支持 webSocket?【英文标题】:Why android webView is not supporting webSocket?为什么 android webView 不支持 webSocket? 【发布时间】:2019-02-04 09:24:09 【问题描述】:

在我的应用程序中,我使用 webView 来调用 URL。我的网站正在使用 web Socket 来更改值。 当我在 chrome 应用程序中打开相同的 URL 时,它的值会发生变化,这意味着 Web 套接字工作正常。但是,内部 webView 值的变化并没有发生。这是否意味着 webView 小部件中不支持 web Socket。在哪里,我注意到 WebViewClient 的 onLoadResource() 方法一直在无限次调用。

【问题讨论】:

WebSocket in android WebView的可能重复 所以我需要更改 html/JS 文件 【参考方案1】:

Web 套接字无法工作,因为默认情况下本地存储被禁用。

在我的 Android WebView 中启用它解决了这个问题。

webView.getSettings().setDomStorageEnabled(true);

【讨论】:

嗨,这是否意味着 websocket 现在在您的 webview 应用程序中正常工作?我问是因为在关于这个主题的较早的问题 (***.com/questions/13507438/…) 中,接受的答案说它不受支持。所以我想在开始之前确定。谢谢!【参考方案2】:

就我而言,我还必须启用 AppCache。现在工作正常。

final WebSettings settings = web.getSettings();

    settings.setLoadsImagesAutomatically(true);
    settings.setjavascriptEnabled(true);
    settings.setDomStorageEnabled(true);
    settings.setAppCacheEnabled(true);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
        settings.setSafeBrowsingEnabled(false);
        settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    
    web.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
        CookieManager.getInstance().setAcceptThirdPartyCookies(web, true);
    


    // Extras tried for Android 9.0, can be removed if want.
    settings.setAllowContentAccess(true);
    settings.setAllowFileAccess(true);
    settings.setBlockNetworkImage(false);

【讨论】:

【参考方案3】:

首先检查您的错误代码;如果代码是:ERR_CLEARTEXT_NOT_PERMITTED 尝试将其添加到您的 AndroidManifest.xml 中的应用程序标签中,如下所示:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true">

【讨论】:

嗨,这样做之后,websocket 可以在 webview 应用程序上运行吗?较旧的答案说它不受支持,所以我有点困惑。

以上是关于为啥 android webView 不支持 webSocket?的主要内容,如果未能解决你的问题,请参考以下文章

网页在 android webview 中不可用

为啥 Android WebView 不加载 youtube HTML5 iframe 视频?

Electron:为啥 BrowserView 的性能比 Webview 好?

为啥 webView.setWebChromeClient(new WebChromeClient());导致屏幕变黑?

为啥在android中调用新浪微博接口发表的gif图片不动?

HarmonyOS之常用组件WebView的使用