通过监听message对ifram接口返回值做出回调

在某些场景下,我们通过ifram引入了第三方页面且需要对该页面的接口返回值做出一些判断的时候就可以利用监听message方法来达到目的(此处不讨论同域下,子页面调用父页面方法的情况)。

首先我们需要确认ifram加载完毕,因为ifram可能因为各种原因导致加载缓慢,之类用到了ifram.onload。然后再对message进行监听,代码如下

function getcode() {
  var iframe = document.getElementById("ifrm");
  if (iframe) {
    iframe.onload = function () {
      window.addEventListener('message', function (messageFromIframe) {
        if (messageFromIframe.data.status === 200 || messageFromIframe.data.status === 201) {
          // do something
        }
      })
    }
  } else {
    setTimeout(getcode(), 500);
  }
}

除了通过ifram.onload我们还可以通过iframe onreadystatechange事件来监听ifram,这里需要注意的是iframe加载页面的过程中会触发三次onreadystatechange事件,对应的情况分别是loading,interactive和complete,我们这里需要的是第三种情况。

var ifram = document.getElementById('ifrm');
ifram.onreadystatechange = function() {
  if (this.readyState && this.readyState == 'complete') {
    onComplete();
  }
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Bootstrap 的 `<iframe>` 中传递值,可以使用 URL 参数或 JavaScript 通信。 1. 使用 URL 参数 您可以将参数作为 URL 的查询字符串添加到 `<iframe>` 的 `src` 属性中。然后,在 Linux 操作页面中,您可以使用 JavaScript 获取 URL 参数并将其用于页面功能。 以下是一个示例代码: ``` <iframe src="your-linux-page-url?param1=value1&param2=value2" width="100%" height="500"></iframe> ``` 在上述代码中,`param1` 和 `param2` 是 URL 参数名称,`value1` 和 `value2` 是它们的值。您可以根据需要添加更多的参数。 在 Linux 操作页面中,您可以使用 JavaScript 获取 URL 参数。例如,以下代码将获取名为 `param1` 的参数的值: ``` var param1 = new URLSearchParams(window.location.search).get('param1'); ``` 2. 使用 JavaScript 通信 如果您需要在 `<iframe>` 中的页面和父页面之间进行更复杂的通信,您可以使用 JavaScript 的 `postMessage()` 方法。该方法允许您在两个窗口之间传递消息。 以下是一个示例代码: 在父窗口中: ``` <iframe id="my-iframe" src="your-linux-page-url" width="100%" height="500"></iframe> <script> var iframe = document.getElementById('my-iframe'); iframe.contentWindow.postMessage('Hello from parent', '*'); </script> ``` 在 Linux 操作页面中: ``` <script> window.addEventListener('message', function(event) { if (event.origin !== 'http://your-parent-site.com') { return; } console.log('Message received from parent: ' + event.data); event.source.postMessage('Hello from Linux page', event.origin); }); </script> ``` 在上述代码中,父窗口使用 `contentWindow` 属性获取 `<iframe>` 的窗口对象,并使用 `postMessage()` 方法向其发送消息。在 Linux 操作页面中,使用 `window.addEventListener()` 方法监听 `message` 事件,并在事件处理程序中使用 `event.data` 获取来自父窗口的消息。然后,使用 `event.source.postMessage()` 方法向父窗口发送回复消息。 请注意,使用 `postMessage()` 方法可能存在一些安全风险,因此请确保您的网站和应用程序已经采取了必要的安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值