H5之postMessage
阿新 • • 發佈:2017-11-15
來看 ie6 腳本 頁面 參數 sage 消息傳遞 rip 否則
對於跨域我們有很多的解決方案,今天我來分享一下postMessage的那點事,postMessage是html5新增的一個解決跨域的一個方法,不過很可惜萬惡的ie6,7不支持
postMessage()方法允許來自不同源的腳本采用異步方式進行有限的通信,可以實現跨文本檔、多窗口、跨域消息傳遞。聽起來還是很牛掰的!!!
讓我們慢慢的揭開postMessage的神秘面紗......
我們拿跨域中的iframe做例子
<script type="text/javascript"> window.parent.postMessage(‘hello world‘,‘*‘); //在被嵌套的iframe的頁面中寫入這樣一段代碼</script>
註意:postMessage的寫法,postMessage之前寫的是你要通信的window對象(也就是你要像誰通信),此時的window.parent的權限僅限於此,不能在像同域似的,進行獲取父級的DOM元素,否則瀏覽器會報錯,提示你不能進行跨域訪問,我們再來看postMessage中所接收的參數,第一個參數就是你要像另外一個窗口傳遞的數據(只能傳字符串類型),第二個參數表示目標窗口的源,協議+主機+端口號,是為了安全考慮,如果設置為“*”,則表示可以傳遞給任意窗口。
那麽另外一個窗口是如何接收數據的呢
<script type="text/javascript"> window.addEventListener(‘message‘,function(e){ console.log(e.data); //hello world
console.log(e.origin); //http://127.0.0.1:8020 所傳來數據的域
}) </script>
可以看到我們已經拿到了數據,那麽拿到數據我們可以做那些操作呢
<script type="text/javascript"> window.addEventListener(‘message‘,function(e){ console.log(e.data);//hello world if(e.data=="hello world"){ document.body.style.background = ‘red‘; } }) </script>
哇哇。。。是不是很神奇,我們竟然間接的操作了DOM,改變了body的背景顏色,實際工作中操作什麽就看你的需求了,這裏只是拋磚引玉。
H5之postMessage