首页 > 解决方案 > 在加载之前在 iframe 上设置 webkit

问题描述

我试图模仿 wkwebview 在 iOS 上对 webclient 上的 iframe 所做的事情。

本质上发生的事情是在加载 iframe 之前,它会注入 iOS 客户端可以读取的函数。

在 iframe 中加载的页面上,它调用一个函数来与 iOS 客户端通信。

if (window.webkit) {
    window.webkit.messageHandlers.interOp.postMessage(chatMsg);
} else if (window.parent) {
    window.parent.postMessage(chatMsg, '*');
}

我不希望它落入 else window.parent 块,因为 postMessage 从扩展和其他应用程序中获得了相当多的流量。

我想将相同的webkit.messageHandlers.interOp.postMessage功能添加到 Iframe 的窗口对象并在该级别上进行侦听。

iframe 域和 WebClient 域是不同的。

另一种方法是只收听 Iframe 调用的 postMessage 调用。欢迎任何想法谢谢。

标签: htmliosreactjsiframewkwebview

解决方案


如果它是同域 iframe,那么您只需将一个函数分配给父窗口,如下所示:

window.iframeMessageReceiver = msg => alert(`Message received from iframe: ${msg}`)

然后在 iframe 的 if 块中调用此函数:

parent.iframeMessageReceiver(chatMsg)


推荐阅读