使用window.postMessage實現跨域通信

JavaScript由于同源策略的限制,跨域通信一直是棘手的問題。當然解決方案也有很多:

  • document.domain+iframe的設置,應用于主域相同而子域不同;
  • 利用iframe和location.hash,數據直接暴露在了url中,數據容量和類型都有限
  • Flash LocalConnection, 對象可在一個 SWF 文件中或多個 SWF 文件間進行通信, 只要在同一客戶端就行,跨應用程序, 可以跨域。
  • window.name 保存數據以及跨域 iframe 靜態代理動態傳輸方案,充分的運用了window.name因為頁面的url改變而name不改變的特性。

各種方案網上都有很多實例代碼,大家可以自己搜索一下。
html5中最炫酷的API之一:就是?跨文檔消息傳輸Cross Document Messaging。高級瀏覽器Internet Explorer 8+, chrome,Firefox , Opera ?和 Safari?都將支持這個功能。這個功能實現也非常簡單主要包括接受信息的”message”事件和發送消息的”postMessage”方法。

發送消息的”postMessage”方法

向外界窗口發送消息:

otherWindow.postMessage(message, targetOrigin);
otherWindow:?指目標窗口,也就是給哪個window發消息,是 window.frames 屬性的成員或者由 window.open 方法創建的窗口

參數說明:

  • message:?是要發送的消息,類型為 String、Object (IE8、9 不支持)
  • targetOrigin:?是限定消息接收范圍,不限制請使用 ‘*’

接受信息的”message”事件

	var onmessage = function (event) {var data = event.data;var origin = event.origin;//do someing};if (typeof window.addEventListener != 'undefined') {window.addEventListener('message', onmessage, false);} else if (typeof window.attachEvent != 'undefined') {//for iewindow.attachEvent('onmessage', onmessage);}
回調函數第一個參數接收 Event 對象,有三個常用屬性:
  • data:?消息
  • origin:?消息來源地址
  • source:?源 DOMWindow 對象

看一個簡單的來自網上的demo:http://www.css88.com/demo/postmessage/

當然postmessage也有一些不足的地方:
  • ie8,ie9下傳遞的數據類型值支持字符串類型,不過可以使用用JSON對象和字符串之間的相互轉換來解決這個問題;
  • ie6,ie7需要寫兼容方案,個人認為window.name比較靠譜;

參考網址:
http://js8.in/752.html
http://www.36ria.com/3890
http://www.planeart.cn/?post_type=post&p=1620

聲明: 本文采用 BY-NC-SA 協議進行授權 | WEB前端開發
轉載請注明轉自《使用window.postMessage實現跨域通信》

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276708.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276708.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276708.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

appium啟動app失敗_Appium-Desktop Capability 配置及啟動App演示

Appium-Desktop Capability配置介紹desired capability的功能是配置Appium會話。為什么要配置capability,目的就是為了告訴Appium服務器您想要自動化的平臺和應用程序。Desired Capabilities是一組設置的鍵值對的集合,其中鍵對應設置的名稱,而…

WinRAR 命令行簡體中文說明

從命令行也可以運行 WinRAR 命令,常規的命令行語法描述如下:WinRAR - -命令 要 WinRAR 運行的字符組合代表功能。開關 切換操作指定類型,壓縮強度,壓縮文件類型,等等的定義。壓縮文件 要處理的壓縮文件名。文件 要處理的文件名。列…

以Windows服務方式運行.NET Core程序

原文:以Windows服務方式運行.NET Core程序在之前一篇博客《以Windows服務方式運行ASP.NET Core程序》中我講述了如何把ASP.NET Core程序作為Windows服務運行的方法,而今,我們又遇到了新的問題,那就是:我們的控制臺程序&#xff0c…

SparkSession.read().csv()無法定位本地文件的問題

原因是spark有兩個文件頭 [file://]代表本地 [hdfs://]代表hdfs路徑 如果路徑沒有文件頭,spark會將該路徑默認添加上"hdfs://" 所以如果要訪問本地csv文件,需要確保路徑前面有"file://" //java代碼,告訴spark這是本地文件…

JavaScript的10種跨域共享的方法

在客戶端編程語言中,如javascript和ActionScript,同源策略是一個很重要的安全理念,它在保證數據的安全性方面有著重要的意義。同源策略規定跨域之間的腳本是隔離的,一個域的腳本不能訪問和操作另外一個域的絕大部分屬性和方法。那…

好用的shell工具_精選5個酷斃的Python工具

來自:Python之禪工欲善其事必先利其器,一個好的工具能讓起到事半功倍的效果,Python社區提供了足夠多的優秀工具來幫助開發者更方便的實現某些想法,下面這幾個工具給我的工作也帶來了很多便利,推薦給追求美好事物的你。…

承載輝煌歷史 暢想無線未來

看了JustDI的文章“手機也能當電腦用?--談談未來智能手機操作系統的走向”,作為嵌入式愛好者,我也想談談自己的看法。首先,從網絡發展的角度看,移動互聯網的寬帶化,寬帶互聯網的移動…

接口碼釋義

1xx:信息,請求收到,繼續處理 2xx:成功,行為被成功地接受、理解和采納 3xx:重定向,為了完成請求,必須進一步執行的動作 4xx:客戶端錯誤,請求包含語法錯誤或…

java讀取文件內容,文件頭有\ufeff

"\ufeff"是UTF-8 BOM編碼的文件頭,代表該文件按照什么字節順序排序 調用java的工具類[ UnicodeInputStream ]即可解決這個問題 //第二個參數targetEncoding為null時在getDetectedEncoding方法中會自動檢測編碼類型 UnicodeInputStream unicodeInputStrea…

6款國內外SNS開源軟件 搭建社交網站利器

SNS(Social Network Service),有時稱為社交網絡,有時稱為社會化網絡,專指旨在幫助人們建立社會性網絡的互聯網應用服務。如果對SNS概念還很模糊,說到人人網、開心網你就明白了。 去年360圈、螞蟻網接連關站給SNS前景蒙上一層陰影&…

aop實現原理_從宏觀的實現原理和設計本質入手,帶你理解 AOP 框架的原理

點擊上方“Java知音”,選擇“置頂公眾號”技術文章第一時間送達!作者:FeelsChaoticjuejin.im/post/5c57b2d5e51d457ffd56ffbb前言本文將從另一個角度講解 AOP,從宏觀的實現原理和設計本質入手。大部分講 AOP 的博文都是一上來就羅…

孟憲會老師推薦的一部C#圖解教程

Amazon五星級盛譽 C# 最新特性一覽無余 數十年開發與教學經驗的結晶 圖、表和文字完美結合,最易學的C# 教程 本書詳細信息:http://www.china-pub.com/43556 微軟4大名著評選結果揭曉:http://www.china-pub.com/static07/0812/jsj_micrmingz_0…

Python數據分析Numpy庫方法簡介(三)

補充: np.ceil()向上取整 3.1向上取整是4 np.floor()向下取整 數組名.resize((m,n)) 重置行列 基礎操作 np.random.randn()符合正態分布(鐘行/高斯)的數據 矩陣的水平拼接 np.vstack((a,b)) 矩陣的垂直拼接 np.hstack((a,b)) 點陣積: np.dot(a,b)/ ab…

xxl-job源碼分析

xxl-job源碼分析 xxl-job 系統說明 安裝 安裝部署參考文檔:分布式任務調度平臺xxl-job 功能 定時調度、服務解耦、靈活控制跑批時間(停止、開啟、重新設定時間、手動觸發) XXL-JOB是一個輕量級分布式任務調度平臺,其核心設計目標是…

定制jQuery File Upload為微博式單文件上傳

原文鏈接:http://avnpc.com/pages/single-file-upload-component-by-jquery-file-upload jQuery File Upload是一個非常優秀的上傳組件,主要使用了XHR作為上傳方式,并且利用了相當多的現代瀏覽器功能,所以可以實現諸如批量上傳、超…

vb趣味編程彈球小游戲_最好玩的微信小游戲集合,總有一款是你沒玩過的

大家好,這里是小雅龍生活趣味時間,自從17年微信推出小游戲程序以來,微信小游戲行業可謂是炙手可熱,知道2019年不斷有許許多多的微信小游戲如雨后春筍般的生根發芽。下面就由我帶大家來看看今年最好玩,最受歡迎的微信小…

開發MOSS2007 Masterpage的一些經驗

一直在做MOSS平臺的Masterpage開發,碰到很多的問題,總結了一些經驗,特此記錄: masterpage的所有的ContentPlaceholder詳細解釋見以下網址:http://www.cnblogs.com/WinYoung/archive/2007/06/25/791766.html 1.如果應用masterpage以后IE狀態欄出現""網頁指令碼錯誤訊息…

Golang——垃圾回收GC(2)

1 垃圾回收中的重要概念 1.1 定義 In computer science, garbage collection (GC) is a form of automatic memory management. The garbage collector, or just collector, attempts to reclaim garbage, or memory occupied by objects that are no longer in use by the pro…

java gui框架_推薦!程序員整理的Java資源大全

構建這里搜集了用來構建應用程序的工具。Apache Maven:Maven使用聲明進行構建并進行依賴管理,偏向于使用約定而不是配置進行構建。Maven優于Apache Ant。后者采用了一種過程化的方式進行配置,所以維護起來相當困難。Gradle:Gradle…

帆軟報表(finereport)控件背景色更改

setTimeout(function() {$(.fr-trigger-btn-up).css({"background-color": "#003399" });}, 100); 轉載于:https://www.cnblogs.com/Williamls/p/11571586.html