国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue頁面內嵌iframe使用postMessage進行數(shù)據(jù)交互(postMessage跨域通信)

這篇具有很好參考價值的文章主要介紹了vue頁面內嵌iframe使用postMessage進行數(shù)據(jù)交互(postMessage跨域通信)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

什么是postMessage

postMessagehtml5引入的API,它允許來自不同源的腳本采用異步方式進行有效的通信,可以實現(xiàn)跨文本文檔,多窗口,跨域消息傳遞.多用于窗口間數(shù)據(jù)通信,這也使它成為跨域通信的一種有效的解決方案.

vue父頁面(嵌入iframe的頁面)

在vue中要使用iframe上的postMessage,首先應該獲取到iframe實例,有以下幾種方式

<iframe :src=“flowSrc” name=“myiframe” ref=“myiframe” id=“myiframe” style=“min-height:800px; width:100%;margin:0;border:0;”> </iframe>

   let iframeWin1 = window.frames["myiframe"];
   let iframeWin2 = this.$refs.myiframe.contentWindow;
   let iframeWin3 = document.getElementById("myiframe").contentWindow;

重點: 將iframe的window窗體存儲至data對象中會出現(xiàn)跨域報錯
重點: 將iframe的window窗體存儲至data對象中會出現(xiàn)跨域報錯
重點: 將iframe的window窗體存儲至data對象中會出現(xiàn)跨域報錯
重要的事情說三遍!?。?!
也不要用這個方式刷新iframe
let iframeWin2 = this.$refs.myiframe.contentWindow;
iframeWin2.location.reload()
這樣操作也會導致跨域
vue頁面內嵌iframe使用postMessage進行數(shù)據(jù)交互(postMessage跨域通信)
在這里踩坑了,明明postMessage是支持跨域通信的,但是我在用的時候還是報跨域了,原因就是上述所說的。

父頁面?zhèn)鬟f數(shù)據(jù)給子頁面(vue->iframe)

<template>
  <div class="home">
    <div class="search-container">
      <el-input placeholder="請輸入內容" v-model="inputValue" clearable class="mind-input">
      </el-input>
      <div class="search-btn">

        <el-button type="primary" @click="search">搜索</el-button>
      </div>
    </div>
    <div class="ifarm-container">
      <iframe :src="flowSrc" name="myiframe" ref="myiframe" id="myiframe" style="min-height:800px; width:100%;margin:0;border:0;"> </iframe>
    </div>

  </div>
</template>

<script>


export default {
  name: 'HomeView',
  data() {
    return {
      inputValue: '',
      flowSrc: null,
    }
  },
  created() {
    this.flowSrc = 'http://localhost/login';  //直接給flowSrc賦值鏈接
  },
  mounted() {
    // this.passOnIframeData()
  },
  methods: {
    search() {
      this.sendMessage(this.inputValue)
    },
    // 給iframe傳遞數(shù)據(jù)
    sendMessage(msg){
        let iframeWin = window.frames["myiframe"];
        //將iframe的window窗體存儲至data對象中會出現(xiàn)跨域報錯
        iframeWin.postMessage(msg,"*");
    },
   
  }
}
</script>
<style lang="less" scoped>
.home {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;

  .search-container {
    display: flex;
    align-items: center;
    justify-content: space-between;

    .mind-input {
      width: 500px;
    }

    .search-btn {
      flex: 1;
      margin-left: 20px;
    }
  }

  .ifarm-container {
    width: 98%;
    min-height: 800px;
    margin-top: 20px;
    border: 1px solid rgb(175, 171, 171);
  }
}
</style>


子頁面接收父頁面數(shù)據(jù)(iframe接收vue傳遞過來的數(shù)據(jù))

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>iframe跨域子頁面</title>
</head>
<body>
    <div id="mydiv">
        vue、iframe、postMessage跨域子頁面
    </div>
</body>
<script>
    //監(jiān)聽message事件,采用冒泡傳遞方式
    window.addEventListener("message",receiveMessage,false);
    function receiveMessage(event){
        let data = event.data
        console.log('我是父頁面?zhèn)鬟f過來的', data)
        document.getElementById("mydiv").innerHTML = data;
    }
</script>
</html>

子頁面向父頁面?zhèn)鬟f數(shù)據(jù)
在子頁面中使用parent.postMessage或者window.parent.postMessage向父元頁面發(fā)送消息

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>iframe跨域子頁面</title>
</head>
<body>
    <div id="mydiv">
       <button onClick="sendMessage">回傳數(shù)據(jù)</button>
    </div>
</body>
<script>
    function sendMessage(data){
        let data = event.data
        console.log('我是父頁面?zhèn)鬟f過來的', data)
        window.parent.postMessage("回傳數(shù)據(jù)----哈哈哈哈", "*")
    }
</script>
</html>

父頁面接收子頁面的數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-425212.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>跨域父頁面</title>
</head>
<body>
    <div id="app">
        <iframe name="myiframe" ref="myiframe" id="myiframe" src="http://www.a.com/index.html"></iframe>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: '跨域父頁面',
                iframeWin: null, 
            },
            methods: {
                //處理接收的消息
                receiveMessage(event){
                    let data = event.data;
                    console.log('子組件傳遞過來的數(shù)據(jù)', data)
                }
            },
            created(){
                window.addEventListener("message",this.receiveMessage,false);
            },
            //vue實例銷毀時銷毀一些監(jiān)聽事件
            destroyed(){
                window.removeEventListener("message",this.receiveMessage);

            }
        })
    </script>
</body>
</html>

到了這里,關于vue頁面內嵌iframe使用postMessage進行數(shù)據(jù)交互(postMessage跨域通信)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 微信小程序和webview使用postMessage交互

    微信小程序和webview使用postMessage交互

    小程序和webview能交互,但是沒有你想的那個完美 小程序向webview傳遞參數(shù)只能使用url攜帶參數(shù) webview向小程序傳遞參數(shù)可以使用postMessage, 但是注意了,postMessage只會在特定的時機執(zhí)行 ,請看官方文檔 由此可見,如果你想點擊webview中的一個按鈕A,然后給小程序發(fā)消息,然后由

    2024年02月02日
    瀏覽(26)
  • iframe 給嵌入的 vue頁面發(fā)送數(shù)據(jù)(vue2、vue3 都ok)

    iframe 給嵌入的 vue頁面發(fā)送數(shù)據(jù)(vue2、vue3 都ok)

    這就是一個普通的網(wǎng)頁 網(wǎng)頁大致長這樣 注意 : 這里接收事件的代碼要寫在 onMount() 聲明周期鉤子中 主要的就是進行事件監(jiān)聽 :window.addEventListener(‘message’, function(e) {xxxxxx})

    2024年02月06日
    瀏覽(22)
  • 在layui中使用vue,使用vue進行頁面數(shù)據(jù)部分數(shù)據(jù)更新

    在layui中使用vue,使用vue進行頁面數(shù)據(jù)部分數(shù)據(jù)更新

    layui是一款非常優(yōu)秀的框架,使用也非常的廣泛,許多后臺管理系統(tǒng)都使用layui,簡單便捷,但是在涉及頁面部分數(shù)據(jù)變化,就比較難以處理,比如一個頁面一個提交頁,提交之后部分數(shù)據(jù)實時進行更新,根據(jù)數(shù)據(jù)動態(tài)控制元素顯示等。這些情況使用layui就需要自己用原始js方

    2024年02月11日
    瀏覽(23)
  • 與iframe進行跨域交互的解決方案

    目錄 前言 使用 postMessage() 方法 使用location.hash? document.domain屬性? 使用window.name 屬性? CORS 使用JSONP 使用WebSocket? 使用WebRTC? 使用中間頁面? 在Web開發(fā)中,為了避免安全漏洞,瀏覽器會實行同源策略(Same-Origin Policy),即只允許同源網(wǎng)頁之間進行交互,而跨域的交互是被禁止

    2024年02月05日
    瀏覽(33)
  • 小程序內嵌H5頁面,需要在H5頁面進行截圖保存和轉發(fā)給朋友的操作

    小程序內嵌H5頁面,需要在H5頁面進行截圖保存和轉發(fā)給朋友的操作

    首先在H5項目內,你需要下載 weixin-js-sdk 和 html2canvas,weixin-js-sdk 是為了在項目內可以使用wx的一些API, html2canvas 是通過canves畫出你頁面的base64位圖片。 npm install?--save weixin-js-sdk npm install --save html2canvas 注意,使用weixin-js-sdk應該是要簽名的,這個讓后端去生成接口去獲得 然后

    2024年02月09日
    瀏覽(14)
  • vue3項目利用iframe展示其他頁面

    iframe是html內聯(lián)框架元素,它能夠將另一個 HTML 頁面嵌入到當前頁面中。 主要屬性如下: src 被嵌套的頁面的 URL 地址 name 框架名稱 scrolling 否要在框架內顯示滾動條。值; auto(僅當框架的內容超出框架的范圍時顯示滾動條)、yes、no width iframe的寬度 height iframe的高度 frameborde

    2024年02月12日
    瀏覽(21)
  • Web自動化測試-如何進行Selenium頁面數(shù)據(jù)及元素交互?教你一步不漏。

    Web自動化測試-如何進行Selenium頁面數(shù)據(jù)及元素交互?教你一步不漏。

    ? 目錄 前言: 一、Selenium簡介 二、安裝Selenium 1.Windows用戶安裝Selenium 2.安裝Chrome瀏覽器驅動 三、使用Selenium進行頁面數(shù)據(jù)及元素交互 1.啟動瀏覽器

    2024年02月07日
    瀏覽(24)
  • 內嵌 iframe 實現(xiàn)PDF預覽

    內嵌 iframe 實現(xiàn)PDF預覽

    效果圖如下: 代碼如下:

    2024年02月12日
    瀏覽(23)
  • iframe內嵌鏈接常見問題

    問題1: ? Refused to display?\\\'http://localhost:8080/xxx\\\'??in a frame because it set \\\'X-Frame-Options\\\' to \\\'sameorigin\\\' 出現(xiàn)原因 :X-Frame-Options 響應頭表示瀏覽器是否允許一個頁面在? frame、iframe、embed 、object 標簽中顯示。站點維護人員可以通過設置該請求頭確保自己的網(wǎng)站沒有被嵌入到別人的網(wǎng)站

    2024年02月06日
    瀏覽(18)
  • Jeecg開發(fā)框架前端VUE2數(shù)據(jù)頁面與后端數(shù)據(jù)庫交互實現(xiàn)

    Jeecg開發(fā)框架前端VUE2數(shù)據(jù)頁面與后端數(shù)據(jù)庫交互實現(xiàn)

    ? JeecgBoot 是一款基于代碼生成器的 低代碼 開發(fā)平臺,零代碼開發(fā)!采用前后端分離架構:SpringBoot2.x,Ant DesignVue,Mybatis-plus,Shiro,JWT。強大的代碼生成器讓前后端代碼一鍵生成,無需寫任何代碼! JeecgBoot引領新的開發(fā)模式(Online Coding模式- 代碼生成器模式- 手工MERGE智能開發(fā)

    2024年02月11日
    瀏覽(50)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包