vue中iframe的使用及說明
關(guān)于iframe的使用
iframe在同域時能自由操作iframe和父框架的內(nèi)容(DOM),在跨域時可以實現(xiàn)頁面跳轉(zhuǎn)。
<iframe id="iframe" :src="iframeSrc" style="height: calc(100% - 50px)" width="100%" frameborder="0"></iframe>
獲取iframe里面的內(nèi)容
iframe.contentWindow
, 獲取iframe的window對象iframe.contentDocument
, 獲取iframe的document對象
const _iframe = document.getElementById('iframe').contentWindow
CDM跨域
如果你設(shè)置的iframe的域名和你top window的域名完全不同,可以使用CDM(cross document messaging)進(jìn)行跨域消息的傳遞。
發(fā)送消息: 使用postmessage方法
postMessage(message, targetOrigin)
message
: 傳遞給iframe的內(nèi)容, 通常是string,最好不要傳object對象,需要傳對象時,使用JSON.stringfy轉(zhuǎn)換。targetOrigin
: 接受你傳遞消息的域名,可以設(shè)置絕對路徑,也可以設(shè)置""或者"/"。 表示任意域名都行,"/"表示只能傳遞給同域域名。
_iframe.postMessage(JSON.stringify(_obj), '*')
接受消息: 監(jiān)聽message事件
當(dāng)targetOrigin接受到message消息之后,會觸發(fā)message事件。 message提供的event對象上有3個重要的屬性,data,origin,source.
window.addEventListener('message', function (event) { ? ? ? console.log(event) ? ? ? if (event.origin === window.callBackUrl.iframeSrc) { ? ? ? ? _this.childData = event.data ? ? ? ? console.log(event.data) ? ? ? ? _this.saveForm() ? ? ? } ? ? })
使用iframe的總結(jié)
需求描述:在后臺管理系統(tǒng)中需要預(yù)覽配置的數(shù)據(jù)在手機(jī)上顯示的樣式,方便后臺管理人員操作,因為預(yù)覽的內(nèi)容比較多,h5已經(jīng)寫好了一套代碼,所以利用iframe將h5的頁面展示引入到后臺
代碼展示
iframe:
<iframe ? id="iframe" ? ref="iframe" ? frameborder="0" ? class="iframe" ? :src="srcH5" ? //srcH5:預(yù)覽頁面的地址 /> ? srcH5:'/iframeH5/preview',
父頁面給子頁面?zhèn)髦担?/p>
var iframe = document.getElementById('iframe'); var msg = {name:'張三'} var childDomain = 'http://localhost:80/' ? //預(yù)覽頁面的域名 iframe.contentWindow.postMessage(msg, childDomain);
子頁面給父頁面?zhèn)髦担涸趍ounted中調(diào)用,避免未渲染完成,無法拿到數(shù)據(jù)
? ? ? ? //拿到父頁面?zhèn)鬟f的值 ? ? ? ?window.addEventListener('message', (obj) => { ? ? ? ? ? this.obj = obj.data;? ? ? ? ? ? console.log('拿到數(shù)據(jù)了嗎', this.obj ); ? ? ? ? }, false); ? ? ? ?? ? ? ? ? //將預(yù)覽成功的信息返回給父頁面 ? ? ? ? window.parent.postMessage({ ? ? ? ? ? data: { ? ? ? ? ? ? code:'success' ? ? ? ? ? } ? ? ? ? }, '*');
父頁面監(jiān)聽子頁面返回的成功信息,做進(jìn)一步操作
? ? ?window.addEventListener('message', this.handleMessage); ? ? ?// 監(jiān)聽h5頁面的通信 ? ? ? handleMessage (event) { ? ? ? ? const data = event.data.data; ? ? ? ? if(data && data.code === 'success') { ? ? ? ? ? 。。。。。。 ? ? ? ? } ? ? ? },
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
VUE?Element修改el-input和el-select長度的具體步驟
這篇文章主要給大家介紹了關(guān)于VUE?Element修改el-input和el-select長度的具體步驟,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-12-12解決vue 使用axios.all()方法發(fā)起多個請求控制臺報錯的問題
這篇文章主要介紹了解決vue 使用axios.all()方法發(fā)起多個請求控制臺報錯的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11vue3+springboot部署到Windows服務(wù)器的詳細(xì)步驟
這篇文章主要介紹了vue3+springboot部署到Windows服務(wù)器,配置Nginx時,因為現(xiàn)在是把vue前端交給了Nginx代理,所以這里的端口號不一定是我們在vue項目中設(shè)置的端口號,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2022-10-10Vue3.0數(shù)據(jù)響應(yīng)式原理詳解
這篇文章主要介紹了Vue3.0數(shù)據(jù)響應(yīng)式原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10