【问题标题】:WebView HTML Rendering IssueWebView HTML 渲染问题
【发布时间】:2017-11-08 16:23:08
【问题描述】:

我正在构建一个反应原生的应用程序。我有一个用例,我必须打开一些 eSinger 网关(例如在 Web 应用程序中打开的支付网关)。在这个网关中,我必须从后台发布带有 PDF 文件的 base64 数据的表单,以便他们可以将我重定向到他们的网关页面,但有时我用来呈现此页面的 HTML 字符串太大,它会破坏 Web 视图。

组件的render()中的代码是:

<WebView
   source={{html: this.state.data}}
   scalesPageToFit={true}
   onNavigationStateChange={ this.onNavigationStateChange.bind(this) }
 />

我在 constructor 中使用如下字符串初始化 data

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();});

当大小约为 1 MB 的文件的 base64 正在工作但之后开始中断时。 我的 HTML 字符串长度是 4548156。

我可以将多长的 HTML 字符串传递给 WebView?

提前致谢。

【问题讨论】:

  • 您似乎将值设置为$('#File').val('+ this.props.base64+'); 真的需要吗?你为什么要向 DOM 注入这么多数据?
  • 是的,我需要将 base64 数据发布到 eSign POST API 以将我重定向到他们的网关页面。

标签: javascript reactjs react-native webview


【解决方案1】:

我用于渲染 DOM 的数据字符串太长(由于 base64),因此无法渲染。 我通过调用我的 API 解决了这个问题,该 API 通过 ajax 调用在上面的 javascript 中为我提供了 base64 数据,并在运行时将 base64 设置为 #File,从而解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2014-07-11
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多