日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用iframe+postMessage跨域操作和通信

發布時間:2024/8/26 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用iframe+postMessage跨域操作和通信 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用iframe+postMessage跨域操作和通信

場景

1. http://XXX/a.html(自己的)頁面要操作http://YYY/b.html(其他域名的) 2. 看了網上很多都是同域名下的,同域名下我自己就改了,還用的上iframe+postMessage?開玩笑

分析

直接操作肯定是沒戲,同源策略給你限制的死死的。所以要采用iframe+postMessage

實現

1.后端將b頁面轉出字符串,生產接口給前端調用(其實還是為了可以操作b頁面)

這里需要用到后端,后端拿到b頁面,將b頁面生存字符串,然后還需要將頁面所引用相對路徑替換成絕對路徑,不如頁面展示之后都是報錯,無法往下執行.比如頁面引入了一個圖片 <img src='./a.png' />,需要替換成<img src='http://YYY/a.png' /> js ,css同理

2.在a頁面的域名下創建一個新頁面c.html,用來展示b頁面轉換而成的字符串,c頁面操作如下

<div id='patch'></div>var patchNode = document.getElementById('patch')var objE = document.createElement("div")objE.innerHTML = '請求下來的字符串'patchNode.appendChild(objE)

3.a頁面采用iframe加載c頁面

<iframe id="iframe_child" src="./c.html"></iframe>

4.a,c頁面采用postMessage通信

a頁面操作如下 發生內容給iframe$(`#iframe_child`).on('load', function(){ // 和iframe通信var data = {act: 'article', // 自定義的消息類型。msg: {subject: '111'}};// 不限制域名則填寫 * 星號$(`#iframe_child`).contentWindow.postMessage(data, '*')});// 對來自 c.html 的消息進行處理window.addEventListener('message', function(e){if (e.data.act == 'response') {console.log(`進行接收之后的操作---${e.data.msg.answer}`)}}, false)c頁面操作如下window.addEventListener('message', function(e){if (e.data.act == 'article') {var article = e.data.msgconsole.log(`接收的信息為`${article.subject})window.parent.postMessage({ // 傳遞給父頁面單次操作完畢act: 'response', msg: {answer: '我收到信息了'}}, '*');} else {console.log('未定義的消息: '+ e.data.act)}}, false);在c頁面直接操作b頁面的字符串生成的dom,間接實現a操作b頁面

5.總結

1.為什么不直接在a頁面展示字符串,還要嵌套一個iframe?

a頁面安全
如果b頁面有跳轉,報錯等問題也影響不到a頁面(主要是我做的時候發現這兩個頁面引用了同一個js,因為js引用順序問題導致b頁面報錯,所以才引入的iframe′⌒`)

2.為啥要把b頁面轉出字符串
為了能操作的無奈之舉,這么操作是為了將跨域的頁面b轉成同域名頁面c,在c操作b的dom

轉載于:https://www.cnblogs.com/liuhuanwen/p/11341148.html

總結

以上是生活随笔為你收集整理的使用iframe+postMessage跨域操作和通信的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。