我正在用 react native 构建一个应用程序。我有一个用例,我必须打开一些 eSinger 网关(例如在 Web 应用程序中打开的支付网关(。在此网关中,我必须从后台发布带有 PDF 文件的 base64 数据的表单,以便他们可以将我重定向到他们的网关页面,但有时我用于呈现此页面的 HTML 字符串太大,它会破坏 Web 视图。
组件render()
中的代码为:
<WebView
source={{html: this.state.data}}
scalesPageToFit={true}
onNavigationStateChange={ this.onNavigationStateChange.bind(this) }
/>
我正在使用如下字符串初始化构造函数中的数据:
let data = `<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><script type = "text/javascript" src = "https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.2.1.min.js"></script><link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Verigo</title></head><body style="margin-top:10%;margin-left:10%;margin-right:10%;"><form action="` + POST_URL + `" id="frmdata" method="post"><input id="File" Name="File" type="hidden"/><input id="Name" name="Name" type="hidden" value=""><input id="SelectPage" name="SelectPage" type="hidden" value="ALL"><input data-val="true" data-val-number="The field SignatureType must be a number." data-val-required="The SignatureType field is required." id="SignatureType" name="SignatureType" type="hidden" value="3"><input id="SignaturePosition" name="SignaturePosition" type="hidden" value="Customize"><input id="AuthToken" name="AuthToken" type="hidden" value=""><input id="PageNumber" name="PageNumber" type="hidden" value=""><input id="Data" name="Data" type="hidden" value=""><input id="FileType" name="FileType" type="hidden" value="PDF"><input data-val="true" data-val-required="The PreviewRequired field is required." id="PreviewRequired" name="PreviewRequired" type="hidden" value="True"><input id="CustomizeCoordinates" name="CustomizeCoordinates" type="hidden" value=""><input id="PagelevelCoordinates" name="PagelevelCoordinates" type="hidden" value=""><input id="ReferenceNumber" name="ReferenceNumber" type="hidden" value=""><input id="IsCosign" name="IsCosign" type="hidden" value=""><input id="SUrl" name="SUrl" type="hidden" value=""><input id="CUrl" name="CUrl" type="hidden" value=""><input id="FUrl" name="FUrl" type="hidden" value=""><center style="position:absolute;top:35%;left:5%"><div><img src="/Content/Img/ajax-loader.gif"><div><p style="font-size:15px;">Redirect to Aadhaar OTP screen.Please don't cancel or press back.This process can take some time.</p></div></div></center></form><script type="text/javascript">$(document).ready(function () {$('#ReferenceNumber').val('` + this.props.transaction_id + `');$('#FileType').val('PDF');$('#File').val('` + this.props.base64 + `');$('#Name').val('` + this.props.sign_payload.user_name + `');$('#AuthToken').val('` + this.props.auth_token + `');$('#SignatureType').val('3');$('#SelectPage').val('ALL');$('#SignaturePosition').val('Customize');$('#PageNumber').val('');$('#PagelevelCoordinates').val('');$('#CustomizeCoordinates').val('` + [this.props.sign_payload.yx, this.props.sign_payload.yy, 150, 150].join(",") + `');$('#PreviewRequired').val('False');$('#IsCosign').val('True');$('#SUrl').val('` + surl + `');$('#FUrl').val('` + furl + `');$('#CUrl').val('` + curl + `');$('#frmdata').submit();});</script></body></html>`
上面HTML中的主要JavaScript代码是:
$(document).ready(function () {$('#ReferenceNumber').val('` + this.props.transaction_id + `');$('#FileType').val('PDF');$('#File').val('` + this.props.base64 + `');$('#Name').val('` + this.props.sign_payload.user_name + `');$('#AuthToken').val('` + this.props.auth_token + `');$('#SignatureType').val('3');$('#SelectPage').val('ALL');$('#SignaturePosition').val('Customize');$('#PageNumber').val('');$('#PagelevelCoordinates').val('');$('#CustomizeCoordinates').val('` + [this.props.sign_payload.yx, this.props.sign_payload.yy, 150, 150].join(",") + `');$('#PreviewRequired').val('False');$('#IsCosign').val('True');$('#SUrl').val('` + surl + `');$('#FUrl').val('` + furl + `');$('#CUrl').val('` + curl + `');$('#frmdata').submit();});
当大小约为 64 MB 的文件的 base1 正常工作但之后开始中断时。我的 HTML 字符串长度是 4548156。
我可以传递给 WebView 多少长的 HTML 字符串?
提前谢谢。
我用于渲染 DOM 的数据字符串太长(由于 base64(,因此无法渲染。我通过调用我的 API 解决了这个问题,该 API 通过 ajax 调用和设置 base64 在运行时 #File 在上面的 javascript 中为我提供了 base64 数据,从而解决了这个问题。