WebView拒绝显示图像

2023-11-27

我读过很多关于这个问题的帖子,其中大部分都是旧的,所以我正在创建一个新的帖子,从 React Native v0.61.5 开始

我的问题:我正在检索网页及其引用的文件,将它们写入应用程序的文档文件夹,并尝试将它们加载到 WebView 中。当用户单击按钮并适当设置状态时,会发生这些事件

这是我指示 WebView 的方式:

<WebView 
  source={{html: this.state.html, baseUrl: this.state.baseUrl}}
  originWhitelist={['*']}
  allowFileAccessFromFileURLs
  allowFileAccess={true}
/>

以及文件的内容。请注意,徽标与引用它的文件位于同一目录中:

<h1>per aspera ad astra</h1>
<img src="logo.jpg"/>

我遇到的问题是我看不到图像。它显示为一个小问号的蓝色图像。如果我看baseUrl,它被设置为:

文件:///Users/ekkis/Library/Developer/CoreSimulator/Devices/9F96B01B-3C66-4ABA-96A5-B58049FB9212/data/Containers/Data/Application/735BD192-FC7B-4708-9973-64C3C9953A0D/Documents

...这似乎是正确的。我在 iOS 上运行这个

我也尝试过(如其他地方所建议的):

  source={require(this.state.uri)}

但这失败了(我收到错误:“Error: TransformError App.js: App.js:第 62 行无效调用:require(this.state.uri)”。这没有什么意义,因为 require 无法读取 HTML 文件,但也许有应该是一些黑魔法,但对我来说不起作用。我也尝试过简单地设置uri但它也不起作用(而且我无法设置baseUrl在这种情况下)

我确信有人已经这样做了。这是该组件的基本情况。我期待任何指导


下面是在 iOS 的 Web 视图中使用文件的工作示例。它使用react-native-fsnpm 包使用以下命令将文件下载到本地imageUrl变量来定义下载什么图像。我在示例中使用的 URL 指向一条小溪的自然照片。

以下示例允许指定文件夹内的所有图像baseFolderPath以及任何嵌套文件夹内。

谨慎的做法是在两个文件之间保持相同的文件扩展名imageUrl and imageLocalPath变量。

import React, { useState, useEffect } from 'react';
import { Text } from 'react-native';
import { WebView } from 'react-native-webview';
import * as RNFS from 'react-native-fs';

const { DocumentDirectoryPath } = RNFS;
const getFolder = filepath => filepath.split('/').slice(0, -1).join('/');
const ensureFolderExists = folderPath => RNFS.mkdir(folderPath + '/', { NSURLIsExcludedFromBackupKey: true });
const writeFile = async (filepath, content, encoding = 'utf8') => {
  await ensureFolderExists(getFolder(filepath));
  await RNFS.writeFile(filepath, content, encoding);
};
const downloadFile = async (fileUrl, destinationPath) => {
  await ensureFolderExists(getFolder(destinationPath));
  await RNFS.downloadFile({
    fromUrl: fileUrl,
    toFile: destinationPath,
    headers: {},
  }).promise;
  return destinationPath;
};

export default () => {
  const baseLocalPath = `${RNFS.DocumentDirectoryPath}/myFolder`;
  const htmlLocalPath = `${baseLocalPath}/webview.html`;

  const imageLocalPath = `${baseLocalPath}/images/myImage.jpg`;
  const imageUrl = `https://images.pexels.com/photos/3225517/pexels-photo-3225517.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2`;

  const html = `<html><body><img src="${imageLocalPath}" style="width: 100%;height:100%;"></body></html>`;

  const [imageDownloaded, setImageDownloaded] = useState(false);
  const [htmlFileWritten, setHtmlFileWritten] = useState(false);
  useEffect(() => {
    writeFile(htmlLocalPath, html).then(() => setHtmlFileWritten(true));
    downloadFile(imageUrl, imageLocalPath).then(() => setImageDownloaded(true));
  }, []);

  return (
    (htmlFileWritten && imageDownloaded) ? (
      <WebView
        originWhitelist={['*']}
        allowFileAccessFromFileURLs={true}
        allowUniversalAccessFromFileURLs={true}
        allowingReadAccessToURL={baseLocalPath}
        source={{ uri: htmlLocalPath }}
      />
    ) : <Text>Loading</Text>
  );
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebView拒绝显示图像 的相关文章

  • 外观代理 - iOS 5 的 setShadowImage 替代品?

    您好 我正在使用此代码来设置导航栏的阴影图像 if self navigationController navigationBar respondsToSelector selector shadowImage UINavigationBa
  • 如何在Javascript中声明静态变量[重复]

    这个问题在这里已经有答案了 在下面的代码中 我希望有一个计数器来跟踪创建的 Person 对象的数量 这段代码没有这样做 我该如何实现呢 function Person this name Peter this counter this c
  • 获取 pdf 第 1 页(共 2 页)的图像

    我正在使用 html2canvas 和 jsPDF 以及 Angular4 创建图像 我想将此图像放置在 2 页生成的 pdf 的第 1 页上 但似乎这条线 doc save test pdf 需要在函数内部htm2canvas 因为如果我
  • 使用 Javascript 对象模型在 SharePoint 任务上设置“分配给”

    我想创建一个共享点任务并将其分配给我自己 当前用户 在 javascript 对象模型中 我有下面的代码 但我认为我需要设置 spusercollection 对象 而不是设置特定用户 但是 我似乎无法在任何地方找到如何执行此操作的任何示例
  • 如果在系统设置中关闭隐藏式字幕,则不会显示字幕

    我正在尝试显示字幕 无论设备在辅助功能下设置了什么 目前 如果设备设置为英语并在设置中启用隐藏式字幕 则将播放英语字幕 如果设备设置为西班牙语 则将播放西班牙语字幕 我希望无论隐藏式字幕是否打开 都能播放字幕 我尝试添加这段代码 https
  • 无法提取 Typescript 中的对象值

    我一直在尝试将 JavaScript Web 表单转换为 Typescript 但无法弄清楚如何处理以下内容 在 JavaScript 中有效 let fieldValues JSON parse cookieData let keys O
  • 我什么时候应该使用内联和外部 Javascript?

    我想知道什么时候应该包含外部脚本或将它们与 html 代码内联编写 就性能和易于维护而言 这方面的一般做法是什么 真实场景 我有几个需要客户端表单验证的 html 页面 为此 我使用了一个包含在所有这些页面上的 jQuery 插件 但问题是
  • toJSON() 和 JSON.Stringify() 之间的区别

    如果您需要读取或克隆模型的所有数据属性 请使用其 toJSON 方法 此方法返回属性的副本作为 对象 尽管有其名称 但不是 JSON 字符串 当 JSON stringify 为 使用 toJSON 方法传递一个对象 它将返回的字符串化 t
  • 如何在 VMware 中运行的 MAC 操作系统中安装 Xcode - 无法安装 Xcode,因为需要 OS X 版本 10.12 或更高版本

    我想开始进行 iOS 应用程序开发 但此时我买不起 MAC 计算机 因此我在 VMware 的虚拟机中安装了 MAC OS X Sierra 方法如下 下一步是获取 XCode 所以我打开App Store并搜索它 我发现一个错误 内容是M
  • 优化构建中通用函数的 Core Data Swift 转换失败

    我们有一个具有相当广泛的核心数据模型的应用程序 其中有许多用 Objective C 实现的自定义子类 但越来越多的用 Swift 编写的应用程序也使用这些子类 值得一提的是 我们使用 Xcode 7 3 1 针对 iOS 9 3 进行构建
  • 根据数据更改图例颜色高图表

    我可以根据数据动态设置列的颜色 但无法弄清楚如何更改图例中的颜色 请注意 jsfiddle 最新的条形图是绿色的 但图例是蓝色的 有没有办法改变列颜色也会改变图例颜色 这是我用于列颜色的代码 jsfiddle http jsfiddle n
  • 如何在 Next.js 中正确使用 Mongoose 模型?

    我正在使用 TypeScript 和 MongoDB Mongoose 构建 Next js 应用程序 我在使用 Mongoose 模型时开始遇到错误 这导致它们在每次使用模型时都尝试覆盖模型 导致模型覆盖错误的代码 import mong
  • D3 时间解析返回 null

    根据此页面上的说明 https github com mbostock d3 wiki Time Formatting https github com mbostock d3 wiki Time Formatting我正在尝试解析 ISO
  • JavaScript 按名称获取当前作用域中的变量

    所以我有一个变量和该变量名称的字符串 function Factory string var foo bar console log foo is equal to this string 如果变量所在的对象是当前对象 如何从字符串文字中获
  • 按钮导致页面重新加载

    我在我的页面上使用 html 和 jquery 在我的 html 中 我有一个按钮 单击该按钮将触发一个功能 当页面加载时 我调用文档准备中的主函数 这是我的代码 div div
  • 加载 angularjs 路由后运行 javascript 代码

    我需要在 angularjs 加载路线后显示警报 显示警报的代码位于 angularjs 异步加载的视图中 视图加载后 我希望它能够运行 但它没有 我知道我可以广播并告诉它稍后运行等 但我需要一个更通用的解决方案 假设您正在谈论基于以下内容
  • Modernizr 未将类应用于 html 标签

    我目前正在构建一个网站 我需要使用 Modernizr 但由于某种原因 它没有将类应用到 html 标签 因为它应该 我的代码如下所示
  • 检测图像是否损坏或损坏

    我需要以编程方式检查用户在我的应用程序上选择作为壁纸的图像是否已损坏或损坏 基本上我为用户提供了选择自己的图像作为壁纸的选项 现在 当图像加载时 我只想检查它是否已损坏 如果您正在寻找 PHP 解决方案而不是 javascript 解决方案
  • 保留对 React 状态变量的“引用”

    据我所知 Javascript 中没有指针 我有以下问题 但我想知道是否有一个解决方案让我无法解决 解决方案可能是普通的 Javascript 或者像 Context API 这样的 React js 钩子 useContext 或者更多
  • 用于测试对象类型的通用 Swift 函数

    我正在尝试编写一个函数 该函数接受一个对象和一个类型作为参数 并返回一个布尔值 指示该对象是否属于给定类型 似乎没有 Type 类型 所以我不知道如何做到这一点 我能做的最好的就是 func objectIsType

随机推荐

  • JavaScript:如何在不附加查询字符串的情况下重试加载图像?

    网页包含少量图像 5 10 个 平均大小 有时 图像加载会随机失败并且不显示 假设每加载 100 个图像就有 1 个失败 这可能是因为服务器繁忙或出现临时网络问题 任何原因 而发生的 我确信获取图像的请求是有效的 因此如果我重试加载图像 我
  • 从 TYPO3 6.1 中的 Extbase 映射到“页面”表

    我使用域模型创建了一个扩展Message 该模型与 TYPO3 具有 m n 关系pages 包含页面详细信息的表 如标题 issite root 等 表 然而 通过使用mapping to existing tables选项 它给了我ty
  • Apache Pivot 1.4 与 JavaFX、Flex、Silverlight、Swing [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我最近听说Apache P
  • 使用 axios 在 React-Native 中使用 POST 方法获取 API 数据

    我需要使用 axios 在 React Native 应用程序中获取数据 我可以使用简单的 GET 方法获取数据 如下所示 class AlbumList extends Component state albums componentWi
  • 带foldr的Haskell递归函数示例

    经过短暂的中断后 我再次开始学习 Haskell 目前我正在尝试更好地了解递归和 lambda 表达式在 Haskell 中的工作原理 在此 Youtube 视频 有一个函数示例 就其实际工作原理而言 让我更加困惑 firstThat a
  • Python selenium 获取页面标题

    from selenium import webdriver from selenium webdriver common by import By from selenium webdriver support ui import Web
  • 二进制数和基数的表示

    那么 二进制就是以 2 为基数 对吗 1 和 0 但是 为什么当你从 dec 转换为 bin 时 例如在 Google 上 它的实际数字前面还有一个 x b 吗 例如 0b 是什么意思 mean 数字前面的符号 0b 只是指示后面的内容是否
  • C# Winform 在 SerialPort.Close 上冻结

    我有一个 winform 程序 它在 a 上执行一些异步 IOSerialPort 但是 我定期遇到程序在 SerialPort Close 调用上冻结的问题 这似乎是随机的 我认为这是一个线程安全问题 但我不确定如何修复它 我尝试使用端口
  • 从命令行执行 Java 程序时收到“错误名称”NoClassDefFoundError

    我在尝试执行 java 应用程序时遇到问题 每当我尝试通过命令执行程序时 java ProgAudioJ 我收到此错误 Exception in thread main java lang NoClassDefFoundError Prog
  • 使用服务器套接字后如何关闭端口[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 在我的应用程序中 我创建了一个ServerSocket
  • 如何在 C# 中将 *.RESX XML 文件转换为 JSON 文件

    如何在 C 中将 RESX XML 文件转换为 JSON 文件 我有常规的 RESX 文件 例如
  • Python 3.6 中带有元组的格式化字符串文字

    With str format 我可以使用元组来访问参数 gt gt gt 0 1 2 format a b c a b c or gt gt gt t a b c gt gt gt 0 1 2 format t a b c 但是 有了以
  • java.lang.NoSuchMethodError: org.apache.poi.hssf.usermodel.HSSFSheet.setColumnWidth(II)V

    我正在尝试生成 Jasper Excel 报告 我收到如下异常 java lang NoSuchMethodError org apache poi hssf usermodel HSSFSheet setColumnWidth II V
  • 用于插入和更新的 MySQL Fire 触发器

    是否可以为表的插入和更新事件触发 mysql 触发器 我知道我可以执行以下操作 CREATE TRIGGER my trigger AFTER INSERT ON table FOR EACH ROW BEGIN END CREATE TR
  • 'window.history.length' 的最大值

    的价值window history length在我们的项目中检测浏览器中后退按钮被点击非常重要 然而 我意识到window history length没有通过 50 我该如何解决这个问题 根据您是否需要跨会话保持持久性以及是否需要清除用
  • Android 相机意图返回 null...有时[重复]

    这个问题在这里已经有答案了 我正在两个不同的物理设备上调试我的应用程序 摩托罗拉 Moto G 安卓 4 4 2 LG OPTIMUS L5 II 安卓 4 1 2 我用按钮调用相机 buttonCamera setOnClickListe
  • 重置 C/C++ 预处理器 #line 物理文件/行

    我有一个代码生成器 它将获取一些用户编写的代码并将其块嵌入到更大的生成文件中 我希望底层编译器在用户代码中存在缺陷时提供良好的诊断 但我也不希望生成的代码中的缺陷在不应该的情况下被错误地归因于源代码 我打算发射 line lineNum s
  • 从不同数据框中的Excel读取多个选项卡

    我正在尝试将电子表格中的多个选项卡读取到不同的数据帧 一旦所有带有数据的选项卡都结束 程序就应该停止 对于第一部分 我想做类似的事情 xls pd ExcelFile Unique xlsx for i in range 1 n n sho
  • 在groovy中创建Arraylist和Hashmap有哪些不同的方法

    我创建了一个如下所示的 ArrayList def list new ArrayList 但 Codenarc 报告警告如下 ArrayList objects are better instantiated using the form
  • WebView拒绝显示图像

    我读过很多关于这个问题的帖子 其中大部分都是旧的 所以我正在创建一个新的帖子 从 React Native v0 61 5 开始 我的问题 我正在检索网页及其引用的文件 将它们写入应用程序的文档文件夹 并尝试将它们加载到 WebView 中