在Vue中,經常需要使用到iframe組件來嵌入其他的網頁或應用程序,同時也需要通過iframe來傳遞各種參數,從而實現不同的功能。本文將詳細介紹Vue iframe傳參數的方法,幫助大家更好地掌握Vue框架的使用。
VUE中使用iframe嵌套外部網頁的方式不多,但是,如果需要嵌套外部網頁或使用某些第三方控件時,如何將某些參數傳入iframe中,是開發人員必須要面對的問題。
<iframe id="iframe1" class="hasframe" sandbox="allow-forms allow-scripts allow-same-origin"></iframe>
上面是一個最基本的帶有iframe的HTML代碼,在這個基礎上,我們可以通過src或者content來將所需參數傳給iframe。
<iframe id="iframe1" class="hasframe" :src="'https://myotherpage.com/?id='+$route.query.id+'&name='+$route.query.name" sandbox="allow-forms allow-scripts allow-same-origin"></iframe>
使用Vue的路由功能,可以將src插入到iframe的地址屬性中,這樣我們就可以構建一個包含參數的URL,然后將URL分配給iframe的src屬性。這里的$route是Vue路由的全局注入,可以獲取到當前的路由信息。
上述代碼用了$route.query來獲取路由中參數的值。如果你的項目中沒有使用vue-router,那么可以考慮在前端解析URL獲取參數值。
created() { let url = new URL(window.location.href); this.id = url.searchParams.get('id'); this.name = url.searchParams.get('name'); console.log('id:' + this.id + ',name:' + this.name); },
類似上述代碼,使用了URL API中的searchParams可以非常方便地解析URL中的查詢參數。
另外,我們還可以通過postMessage這個API接口來實現iframe與Vue組件之間的數據傳遞。
postMessage主要接收2個參數,第一個是傳遞的消息,第二個是接收消息的域名,當傳遞的域名與接收的域名不一致時,接收頁面將無法獲取消息。
在父級頁面中,我們可以通過以下代碼向iframe發送參數:
const iframe = document.getElementById('myiframe'); const messageObject = { type: 'params', data: { id: userId, name: userName, }}; iframe.contentWindow.postMessage(messageObject, '*');
其中,messageObject就是需要傳遞的參數,第二個參數支持傳入iframe的URL地址或域名,例如 https://myotherpage.com/ 或 http://localhost:8080。
接收iframe傳來的數據,可以通過以下代碼實現:
window.addEventListener('message', function(e){ if (e.origin != 'http://localhost:8080') { return } const data = e.data; if (data.type === 'params') { console.log(data.data.id, data.data.name); } });
其中,需要校驗消息的來源是不是等于我們定義的域名,確保我們只獲取到來自我們知道的來源的消息。
到此,我們已經介紹了Vue中iframe傳遞參數的幾種方法:使用src地址傳遞參數,使用Vue路由傳遞參數以及通過postMessage實現跨域iframe傳遞參數。我們希望這篇文章能夠幫助到大家,更好地應用Vue框架。