我尝试将本地.html
文件加载到React Native中的WebView
:
// load local .html file
const PolicyHTML = require('./Policy.html');
// PolicyHTML is just a number of `1`
console.log('PolicyHTML:', PolicyHTML);
// will cause an error: JSON value '1' of type NSNumber cannot be converted to NSString
<WebView html={PolicyHTML} />
.html
文件应作为字符串读取,而不是作为资源代表读取。
如何在React Native中将.html
文件加载到WebView
中?
顺便问一下,require()
的那些资源代表是什么类型的?是number
吗?
7条答案
按热度按时间5jvtdoz21#
试试看:
vwoqyblh2#
我遇到了这个职位的搜索加载静态html。
如果您的html代码是使用API等检索的,则可以按以下方式呈现WebView:
请注意,如文档中所述,
originWhitelist
是必需的:请注意,静态html将需要设置原始白名单,例如设置为["*"]。
igetnqfo3#
要创建WebView,父级必须具有维度或flex:1.我们可以将WebView设置为flex:1,以便它填充父对象。
tsm1rwdh4#
如果您还需要为本地资产提供服务,则:
1.将所有资产与
index.html
一起放入android/app/src/main/assets/www
(您可以使用gradle任务将它们复制到那里)1.然后:
d7v8vwbk5#
使用Expo工具并通常使用Expo:
zfycwa2u6#
试试这个:
第一个月
<WebView source={OurStoryHTML} style={{flex: 1, marginTop : 44}} />
也许能帮到你。
8iwquhpp7#
如果你正在使用资源,一旦项目被构建,项目目录在设备目录上是不同的,你不能简单地通过字符串url引用它们。
博览会
如果使用expo,则必须对每个资产执行
require
,然后在需要时使用useAssets
将它们缓存到设备的本地存储。useAssets
将返回一个包含localUri
的对象(这是已经缓存的图像的URI)然后可以使用
localUri
并将其作为映像的src
1.诀窍是将html转换为
string literal
以利用template strings。1.然后您必须手动要求这些资产中的每一个合并
localUrl
require()
支持的类型有限,您需要在根文件夹中添加metro.config.js
。1.如果您
require()
一个.js
文件,它将给出错误,因为它将它作为一个模块读取,而不是,变通方法将是bundle your assetsReact Native
如果目录中有
android
文件夹,请导航到android > app > build.gradle
然后加上
最后,您在gradle中链接的相对文件夹可以通过
file:///android_asset/
访问例如
file:///android_asset/index.html
-〉/asset/index.html
备选
一个快速的解决方案是集成一个static server,但这是
react-native-static-server
的最新分支,只能在vanilla react native中工作。