首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在webview中加载本地HTML文件时拒绝访问错误

在webview中加载本地HTML文件时拒绝访问错误
EN

Stack Overflow用户
提问于 2021-08-16 13:22:46
回答 3查看 1.7K关注 0票数 1

我试图查看一个HTML文件,它根据作用域存储存储在我的应用程序目录中,确切的HTML文件url是"file:///data/user/0/my.app.package/files/Download/page_1.html",但是我打开失败: ENOENT (没有这样的文件或目录)错误。我可以手动看到该文件存在于该路径上。我的目标sdk版本是30,Android 11,我不能改变它--我需要它在android 11上工作。我如何修复它?

我已经尝试过的

  1. 在清单文件中添加了以下代码

Android:supportsRtl=“真”

android:usesCleartextTraffic="true"

  1. I使用webviewAssetLoader加载文件(可以很好地处理资产中的html文件),但不使用应用程序内部存储

中的文件。

EN

回答 3

Stack Overflow用户

发布于 2021-08-16 15:44:50

几周前,我遇到了同样的问题,您需要改变访问HTML文件的方式。

您应该使用WebViewAssetLoader。

https://developer.android.com/reference/androidx/webkit/WebViewAssetLoader

票数 0
EN

Stack Overflow用户

发布于 2021-10-06 09:18:07

代码语言:javascript
运行
复制
binding.webView.apply {
        visible()
        settings.apply {
            useWideViewPort = true
            loadWithOverviewMode = true
            builtInZoomControls = true
            displayZoomControls = false
            allowFileAccess = false
            allowFileAccessFromFileURLs = false
            allowUniversalAccessFromFileURLs = false
            allowContentAccess = true
        }
        val contentUri = FileProvider.getUriForFile(
            this@YourActivity,
            "${BuildConfig.APPLICATION_ID}.provider",
            File(yourHtmlFilePath!!)
        )
        webViewClient = MyWebClient(this@YourActivity)

        contentUri?.let { loadUrl(contentUri.toString()) }
    }

MyWebClient类是

代码语言:javascript
运行
复制
class MyWebClient(context: Context) : WebViewClientCompat() {
private val assetLoader: WebViewAssetLoader = WebViewAssetLoader.Builder()
    .addPathHandler(
        "/public/", WebViewAssetLoader.InternalStoragePathHandler(
            context,
            File(context.filesDir, "public")
        )
    )
    .build()

override fun shouldInterceptRequest(
    view: WebView,
    request: WebResourceRequest
): WebResourceResponse? {
    return assetLoader.shouldInterceptRequest(request.url)
}

override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
    return if (request.isForMainFrame) {
        view.context.startActivity(
            Intent(Intent.ACTION_VIEW, request.url)
        )
        true
    } else false
}

}

票数 0
EN

Stack Overflow用户

发布于 2021-11-09 07:31:03

只需添加以下代码即可。

代码语言:javascript
运行
复制
WebSettings settings = mWebView.getSettings();
settings.setAllowFileAccess(true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68803565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档