iframe标签下的通信

这篇具有很好参考价值的文章主要介绍了iframe标签下的通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通常在页面中嵌套iframe的情况下还需要进行消息传递的通信需求。一般分为两种情况:

1.iframe里的链接与父页面链接是非跨域

        这种情况处理比较简单,直接在父级页面下就可以写脚本控制iframe里的元素,同时对iframe里的元素进行操作,例如绑定事件,当事件触发时发送消息给父级页面。

        具体实践脚本如下:

    try{ 
    //绑定窗口消息事件,接收来iframe发送的消息
    window.addEventListener('message', function(ev) { 
        if(ev.data.source == 'pt_event' && ev.data.message == 'iframeButton'){ 
            _pt_sp_2.push('setCustomEvent',{eventName:'buy_product'}); 
        } 
    }, false) 
    //为了避免iframe加载较慢,等2s后绑定元素事件,处理事件触发后获取相关信息并发送父级页面
    setTimeout(function(){ 
        var buttons = document.querySelectorAll('div[id^=product-component-'); 
        if(buttons){ 
            buttons.forEach(function(iframeButton){     
                    iframeButton.querySelector('iframe').contentDocument.body.
                    querySelector('.shopify-buy__btn').
                    addEventListener('click',function(){
                        var msg={}; 
                        msg['source'] = 'pt_event'; 
                        msg['message'] = 'iframeButton'; 
                      parent.postMessage(msg,'*'); 
                    },false) 
            }) 
        } 
    },2000) 
}catch(e){ 
    console.log('ptmsg:'+e) 
}

2.iframe里的链接与父页面链接是跨域关系,这种情况需要在父页面与iframe里分别进行编写脚本进行接收消息与发送消息。

        父页面中监听消息:

try{ 
    window.addEventListener('message', function(ev) { 
        if(ev.data.source == 'pt_event' && ev.data.message == 'iframeButton'){ 
            _pt_sp_2.push('setCustomEvent',{eventName:'buy_product'}); 
        } 
    }, false) 
}catch(e){ 
    console.log('ptmsg:'+e) 
} 

        iframe中事件监听及发送消息:

try{ 
    var btn_event = document.body.querySelector('.layout_image'); 
    if(btn_event){ 
        btn_event.addEventListener('click',function(){ 
        var msg={}; 
        msg['source'] = 'pt_event'; 
        msg['message'] = 'iframeButton'; 
        parent.postMessage(msg,'*'); 
        },false) 
    } 
}catch(e){ 
    console.log('ptmsg:'+e) 
} 

 文章来源地址https://www.toymoban.com/news/detail-651062.html

到了这里,关于iframe标签下的通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • h5|web页面嵌套iframe传参给cocosCreator

    目录 一、快速浏览 二、详细实现与项目代码 三、安全性评估——iframe 实现效果: 一、快速浏览 在h5页面中,使用JavaScript获取需要传递的参数,如下: 使用iframe嵌入cocosCreator游戏页面,同时将参数作为url的query string传递,如下: 在cocosCreator游戏页面中,使用JavaScript获取ur

    2024年02月02日
    浏览(40)
  • iframe嵌套其它网站页面及相关知识点详解

    在开发过程中会遇到需要 在一个页面中嵌套另外一个页面,就要使用到框架 标签,然后指定src就可以了。 基本语法: 用法举例: 运行后效果图: 但是我们需要更好看点的iframe. 我们来看看在iframe中还可以设置些什么属性 属性 值 frameborder 是否显示边框,1(yes),0(no) height 框架

    2024年02月02日
    浏览(41)
  • iframe/window.open/a三种标签打开新页面或新窗口设置请求头;实现免密登录

    对于前端来说,一般在登录获取token之后会把token存入缓存以及放置在Request Headers请求头中,但是使用iframe/window.open/a这三种标签打开新页面或新窗口是没有办法把请求头带过去的,这个时候就需要自己设置请求头,有如下有两种办法: 方法一(不推荐): 第一种方法可以说是最

    2024年02月12日
    浏览(62)
  • vue页面内嵌iframe使用postMessage进行数据交互(postMessage跨域通信)

    什么是postMessage postMessage 是 html5 引入的 API ,它允许来自 不同源 的脚本采用 异步方式进行有效的通信 ,可以实现跨文本文档,多窗口,跨域消息传递.多用于窗口间数据通信,这也使它成为 跨域通信 的一种有效的解决方案. vue父页面(嵌入iframe的页面) 在vue中要使用iframe上的pos

    2023年04月25日
    浏览(66)
  • Django:六、使用iframe标签内嵌页面报错;拒绝了我们的连接请求;because it set ‘X-Frame-Options‘ to ‘deny‘.

    使用标签内嵌页面时报错: 127.0.0.1 拒绝了我们的连接请求。 查看错误代码,发现: Refused to display \\\'http://127.0.0.1:8000/\\\' in a frame because it set \\\'X-Frame-Options\\\' to \\\'deny\\\'. 由于x-frame-options设置了deny属性,导致了iframe失效,x-frame-options响应头是用来给浏览器设置允许一个页面可否在fra

    2024年02月03日
    浏览(49)
  • 踩坑vue中嵌套iframe项目,嵌套在iframe中的项目无法登录!

    解决方案原文 这个我试了下是谷歌浏览器做了限制,在edge上可以正常登录 我遇到这种情况主要是我的项目用的是cookie存储的登录状态。需要设置cookie的域名,使其在嵌入的网站和网站域名下都能访问cookie,但是我设置了还是没用。 我最终的 解决方式 是将cookie存储状态改成

    2023年04月26日
    浏览(64)
  • 位于同一子网下的ip在子网掩码配置错误的情况下如何进行通信(wireshrak抓包分析)

    最近看书发现个问题,正好想学习下wireshark的使用,于是抓包做了下实验。 问题是这样的,假设有服务器A和服务器B,正确配置下两者处于同一子网;此时B的网络配置正确,而A在配置子网掩码时出了错,导致在A中计算B的网段时发现二者不处于同一子网;而它们之间存在网关

    2024年01月19日
    浏览(33)
  • 同一台宿主机不同的docker-compose下的容器互相通信;查看docker的network使用情况

    我的 docker 版本: 24.0.2 docker-compose 版本: 1.29.2 linux 是 ubuntu 20.04 在使用 docker 部署环境的时候大多用 docker-compose 来编排,参数的配置会清晰一点。 通常一个容器一个 docker-compose.yml 文件。 这就使得不同 docker-compose 下的容器不能自动的互相通信。 那么顺着这个思路往下想,

    2024年02月08日
    浏览(45)
  • iframe嵌套grafana (前端视角)

    1、grafana 启动方式  ①.grafana目录鉴赏。咱们就是直接拿到配置好的grafana。咱们暂时不涉及配置数据啥。   ①.双击grafana-server.exe ,会出现黑色命令框。 ②.在浏览器中访问  http://localhost:3000  此时就可以看到配置好的grafana  2.前端嵌入 ①.html ②.可以通过js切换iframe的src地址

    2024年02月16日
    浏览(45)
  • 同源跨窗口通信:网易云音乐不同标签页打开同一页面,暂停原先标签页音频播放

    原文见:语雀 有个声音很好听的小帅哥问我说,如果当前浏览器打开一个标签页,页面播放着音乐,然后相同的链接又在另外一个页面打开,该如何将之前的页面音频停止播放。 有小帅哥问问题,我当然要回答啦(其实是我不得不答)🤣 我一想,这是跨窗口通信,用postM

    2023年04月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包