1. 程式人生 > >js前端進行同一域名或不同域名下兩個頁面跨域通訊

js前端進行同一域名或不同域名下兩個頁面跨域通訊

解決同一域名下和不同域名下的兩個頁面之間進行傳值,可以支援json格式,相容ie8,傳送訊息的postMessage方法支援IE8+,但是在接收訊息的時候,

window.attachEvent方法只支援ie微軟的私有方法,不支援火狐、谷歌等高板本瀏覽器,這是對支援ie8瀏覽器的補充;

所有window.onmessage 方法是對支援符合W3C高版本瀏覽器的情況

主頁面利用iframe指向另一頁面:

一部分:a.html頁面,向b頁面傳送訊息,程式碼如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript">
        //開始畫圖,新增圍欄
        function addPolygon() {
            var ifr = document.getElementById('iframeRight');
            var targetOrigin = '*';
            var func = { name: "addPolygon" };//傳輸name名稱
            var str = JSON.stringify(func); //將json物件 轉成json字串
            ifr.contentWindow.postMessage(str, targetOrigin);
        }


        //重新畫圖
        function editPolygon() {
            var ifr = document.getElementById('iframeRight');
            var targetOrigin = '*';
            var func = { name: "iPloygonEdit" };//傳輸name名稱
            var str = JSON.stringify(func); //將json物件 轉成json字串
            ifr.contentWindow.postMessage(str, targetOrigin);
        }
    </script>
</head>
<body>
    
    <div style="float:left;height:500px;width:100px;">
        <input type="button" value="開始畫圖" onclick="addPolygon()" />
        <input type="button" value="重新畫圖" onclick="editPolygon()" />
    </div>
    <div style="float:left;height:500px;width:800px;">
        <iframe name="iframeRight" id="iframeRight" style="width:100%;height:500px; border:1px solid #ff6a00;" src="b.html"></iframe>
    </div>
</body>
</html>

第二部分:b.html頁面 進行接收a頁面傳遞的訊息

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript">
        if (window.attachEvent) {
            window.attachEvent('onmessage', function (event) {
                
                var getData = JSON.parse(event.data);//將接收的json字串 轉成物件
                // 通過origin屬性判斷訊息來源地址
                if (getData.name == "addPolygon") {
                    alert("addPolygon");
                }
                if (getData.name == "iPloygonEdit") {
                    alert("iPloygonEdit");
                }
            });
        } else {
            window.onmessage = function (event) { //註冊message事件
                
                var getData = JSON.parse(event.data); //將接收的json字串 轉成物件
                if (getData.name == "addPolygon") {
                    alert("addPolygon");
                }
                if (getData.name == "iPloygonEdit") {
                    alert("iPloygonEdit");
                }
            }
        }

    </script>


</head>
<body>
   這是B頁面
</body>
</html>

相關推薦

js前端進行同一域名不同域名頁面通訊

解決同一域名下和不同域名下的兩個頁面之間進行傳值,可以支援json格式,相容ie8,傳送訊息的postMessage方法支援IE8+,但是在接收訊息的時候, window.attachEvent方法只支援ie微軟的私有方法,不支援火狐、谷歌等高板本瀏覽器,這是對支援ie8瀏

JS實現頁面之間的通訊

兩個不同頁面之間的通訊,通過一個拖拽demo來模擬; 首先,寫好基礎的拖拽程式碼: <script>    window.onload = function() {          var oDiv = document.getElementById

mget(可以通過索引、型別、ID一次得到同一索引不同索引庫裡的文件集合) & mapping

使用multi get API可以通過索引名、型別名、文件id一次得到一個文件集合,文件可以來自同一個索引庫,也可以來自不同索引庫。示例如下: MultiGetResponse multiGetItemResponses = client.prepareMultiGet

js獲取n分鐘(n小時或n月)後(前)的時間(日期)

atd 格式 format pos 根據 get 標題 設置 pre   標題有點繞,其實意思就是根據系統當前時間,獲取n分鐘或n小時或n個月後的時間。   例如:當前時間下,獲取10分鐘後的時間。 var date=new Date(); //1. js獲

Web專案防止同一賬號在不同session重複登入

一、session簡介 瀏覽器在請求伺服器時,伺服器都會建立一個session,session負責瀏覽器與伺服器之間的會話。session的存在是為了維護瀏覽器和伺服器之間互動時保留一些互動資料,例如使

JSONP(JS進行通訊)

  程式碼地址:https://github.com/youaresherlock/HeadFirstHtml5 在閱讀headfirsthtml5時,學習了同源策略以及JSONP。下面我簡單介紹一下: 瀏覽器的同源策略: 同源策略限制了從同一個源載入的文件或指

如何把區域網內不同資料庫的表的資料進行傳輸?

應用場景:當測試資料庫的資料不小心被清空了,需要從別的庫裡把資料恢復過來;或者測試庫增加了某表的一些資料,正式庫需要同時更新(當然穩妥的是儲存更新語句)等等,這時就需要用到這個小技巧了。 第一句是把b表中的選單表的資料放到當前資料庫中,並且新建一張tmenu表: select * into TMENU f

頁面之間通過js進行傳值

第一個頁面中有兩個圖片,當點選的時候能在第二個頁面中獲得它的屬性值()通過js進行傳值: 第一個頁面: [html]  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

部署在同一臺機器的不同應用,應用的cookie會互相影響的問題(如果做了登入攔截,會導致已登入的應用需要重新登入)

2018年5月29日記    今天在解決專案的bug時發現的一個問題,我們有兩個系統:許可權管理系統(簡稱系統A)、前臺展示系統(簡稱系統B),發現系統A在登入的情況下,如果在開啟一個頁面登入系統B,再回到系統A訪問時會跳轉到登入頁重新登入,導致的結果系統A與系統B不能同時登

頁面相同js方法兼容

efault val 取url參數 相同 bstr undefined 對象 blog def 1. a.js頁面 1 //Js獲取Url參數 2 function request(paras) { 3 var url = location.h

Centos6.5調整同一VGLV空間

centos LV VG 實驗目的:調整前lv_root分區大小為50GLv_home分區大小為45G 調整後(將lv_home分區減少30G,將30G空間加到lv_root分區)lv_root分區大小為80GLv_home分區大小為15G 操作前註意備份重要數據1 查看磁盤使用情況[ro

用postMessage解決通訊呼叫js問題

本文轉自:https://bbs.implug.cn/?thread-3.htm 平時做web開發的時候關於訊息傳遞,除了客戶端與伺服器傳值,還有幾個經常會遇到的問題: 多視窗之間訊息傳遞(newWin = window.open(…)); 頁面與巢狀的iframe訊息傳遞

同一主機虛擬機器之間的訪問

設定虛擬機器的步驟主要分三步: 1、虛擬機器連線方式設定為橋接; 2、統一網段; 3、關閉windows防火牆 詳情如下: 1、虛擬機器連線方式設定為橋接 注:兩臺虛擬機器的連線方式都要設定為橋接 2、統一網段 如果設定第一步的時候沒有進行ip設定,那麼這兩臺虛

前端通訊的幾種方式

一、JSONP 我們都知道script標籤src屬性中的連結卻可以訪問跨域的js指令碼,利用這個特性,服務端不再返回JSON格式的資料,而是返回一段呼叫某個函式的js程式碼,在src中進行了呼叫函式來獲取到資料,函式中的引數就是我們需要的資料,這樣實現了跨域。 基本思想是: 1、客戶端利

運算來實現變數互換

        一般情況下,如果我們要實現兩個變數互換需要藉助於一個第三方臨時變數,這個臨時變數可以臨時存放某一個變數的值,幫助我們完成值的交換。有沒有不需要其他變數、直接實現值互換的方法呢?  答案是:當然有。     &n

如何在同一臺電腦上同時執行Tomcat(關於Invalid character found in method name.HTTP method names must be token.錯誤資訊)

今天在學習一個專案的時候需要用到Tomcat8,而我的Tomcat版本是7,因為Tomcat7用的久了比較習慣又不想解除安裝,所以打算兩個一起用,在網上查了同一臺電腦上可以執行兩個Tomcat後,就開始部署Tomcat8. 在看了一篇前輩的經驗後將Tomcat8的start

SQL 不同ip的資料庫資料插入,

簡單示例://建立linkServerexec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','伺服器名' //登陸linkServerexec sp_addlinkedsrvlogin 'srv_lnk','false',null

C# 面向物件:類、根據不同操作符操作變數

類 1、當使用類時,應新增一個新類 2、類名首字母需大寫 3、欄位用來儲存資料,private;屬性用來保護欄位;介面、建構函式、方法 public struct1 { // 自動屬性:雖然沒有寫欄位,但是還是會生

js 限制輸入框的位元組數,中文位元組,英文字母一個位元組

也許在網上有很多類似的文章,但是這裡大家應該知道,js裡面,中文和字母的長度都是1,但是資料庫不知道呀,資料庫很多都是按照位元組來的,所以,控制輸入框的位元組數看來比長度限制更為重要。 提出問題: 1、限制文字框為16個位元組,只能輸入中文和字母 解決思路: 1、判斷只能是

node.js搭建介面(九):Node-使用中介軟體實現

使用中介軟體進行跨域必須寫在使用路由之前 //使用中介軟體實現跨域請求 app.use((req,res,next) => { res.header("Access-Control-Allow-Origin","*"); //允許的來源 res