iFrame src 不适用于 Android Webview 中的 Base64 编码 HTML 内容

Posted

技术标签:

【中文标题】iFrame src 不适用于 Android Webview 中的 Base64 编码 HTML 内容【英文标题】:iFrame src not working with Base64 Encoded HTML Content in Android Webview 【发布时间】:2021-11-30 10:47:39 【问题描述】:

我正在为一个应用程序开发一个项目,该应用程序将在 web 视图中显示我的反应应用程序。 ReactJS 应用程序在 webview 中完美运行,这就是为什么我假设 JS 在 webview 中被激活。 但是,我试图显示一个 base64 编码的 html 内容,我试图显示如下;

<iframe src=`data:text/html;base64,$HtmlContent`/>

这种方法在浏览器 (Chrome) 中运行良好,但在 web 视图中根本不起作用。

我使用了srcdoc 而不是src。但是我不能 postMessage 到父 ReactJS 应用程序。

有没有办法在这种情况下使用srcdoc,或者在 webview 中 iframe 可能有什么问题?

【问题讨论】:

你找到方法了吗? 不。相反,我在 window.getMessage (等)之类的窗口对象中创建了一个函数,然后我可以在 iframe 中使用该函数。在 iFrame 中,您可以将其称为 window.top.getMessage 【参考方案1】:

Unfutenally 我无法使用这种方法。 但是,由于我可以同时控制 iframe 和 iframe,所以我只需在 iFrame 的父级中创建一个函数,如下所示;

useEffect(() => 
    // Only create once
    // Create a custom function and put it to the window object
    window.handleResult = handler;
, [])

然后从 iFrame 内部访问它;

<script type="text/javascript">
    window.top.handleResult(success: params.success, error: params.error)
</script>

这种方法实际上效果更好。如果由于某种原因您需要一个嵌套的 iframe,无论它有多深,您都可以获得此功能,因为 iframe 内容无论如何都会获得“top”窗口。

我分享这个是因为这个问题可以用不同的方法来解决。也许不是最好的方式,但它是一种工作方式。

【讨论】:

以上是关于iFrame src 不适用于 Android Webview 中的 Base64 编码 HTML 内容的主要内容,如果未能解决你的问题,请参考以下文章

溢出:隐藏;不适用于带有 IFRAME 的 Chrome?

Chrome ios - iframe:window.open 不适用于 onload 处理程序

YouTube iframe 不适用于三星 S2 I9100G

为啥 scrollTo() 方法不适用于 iframe?

为啥 Iframe 不适用于 yahoo.com

样式不适用于 iframe 内容