克服瀏覽器同源策略限制的交互方法及設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種克服瀏覽器同源策略限制的交互方法及設(shè)備。
【背景技術(shù)】
[0002]同源策略是瀏覽器的保護(hù)機(jī)制的一部分,該機(jī)制將來自不同域(假設(shè)域代表的是始發(fā)者)的web應(yīng)用程序分離開來。也就是說,如果多個(gè)窗口或框架中的一些應(yīng)用程序是從不同的域下載的,那么它們是無法相互訪問數(shù)據(jù)和腳本的。具體來說,相同的ip、相同的網(wǎng)絡(luò)協(xié)議、相同的端口,三者都滿足就是同一個(gè)域,否則就屬于不同域網(wǎng)站間的問題。因?yàn)闉g覽器同源策略的限制,一般情況下是不能直接通過一個(gè)域上加載的腳本獲取或者操作另一個(gè)域上的文檔屬性。
[0003]要進(jìn)行不同域網(wǎng)頁(yè)間的信息交互或DOM操作,就要設(shè)法繞過或者說克服同源策略的限制。當(dāng)前主要采用的技術(shù)有以下幾種:
[0004]I) Document, domain的方式,但這種方式只能適用于不同子域的情況;
[0005]2) Window, name的方式,但這種方式瀏覽器兼容的支持有限,只有ie6、ie7支持,
而且數(shù)據(jù)通信量有限;
[0006]3)HTML5postMessage的方式,但這種方式支持的瀏覽器有限,只有支持HTML5的瀏覽器才可以用這種方式;
[0007]4) JSONP的方式,瀏覽器兼容性好,但是這種方式只支持POST而不支持GET請(qǐng)求,并且只支持?jǐn)?shù)據(jù)的交互,并不能解決不同域的頁(yè)面間腳本調(diào)用DOM操作的問題。而且這是一種腳本注入的行為,存在一定的安全隱患。
【發(fā)明內(nèi)容】
[0008]本申請(qǐng)的一個(gè)目的是提供一種克服瀏覽器同源策略限制的交互方法及設(shè)備,能夠解決因?yàn)闉g覽器同源策略的限制,不同域下的網(wǎng)頁(yè)之間不能進(jìn)行數(shù)據(jù)傳遞和DOM控制的問題。
[0009]根據(jù)本申請(qǐng)的一個(gè)方面,提供了一種克服瀏覽器同源策略限制的交互方法,其中,該方法包括:
[0010]通過統(tǒng)一資源定位符的locat1n, hash攜帶待傳遞的數(shù)據(jù)在不同域的父頁(yè)面和子頁(yè)面之間傳遞數(shù)據(jù);
[0011 ] 和/或以統(tǒng)一資源定位符的locat1n, hash作為標(biāo)識(shí)觸發(fā)父頁(yè)面或子頁(yè)面DOM操作,完成不同域的父頁(yè)面和子頁(yè)面之間的腳本調(diào)用。
[0012]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,通過統(tǒng)一資源定位符的locat1n, hash攜帶待傳遞的數(shù)據(jù)在不同域的父頁(yè)面和子頁(yè)面之間傳遞數(shù)據(jù)中,當(dāng)子頁(yè)面獲取父頁(yè)面的待傳遞數(shù)據(jù)時(shí),包括:
[0013]在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性src設(shè)置為子頁(yè)面的鏈接;
[0014]將所述待傳遞的數(shù)據(jù)放在屬性src的統(tǒng)一資源定位符的locat1n, hash中;
[0015]在子頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中待傳遞數(shù)據(jù)是否有變化,如果有變化,將有變化的待傳遞數(shù)據(jù)賦值給所述變量。
[0016]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,在子頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中待傳遞數(shù)據(jù)是否有變化,如果有變化,將有變化的待傳遞數(shù)據(jù)賦值給所述變量,包括:
[0017]在子頁(yè)面中定義一個(gè)變量,子頁(yè)面每隔預(yù)設(shè)時(shí)間獲取locat1n, hash中的待傳遞數(shù)據(jù),將獲取到的待傳遞數(shù)據(jù)與所述變量的值進(jìn)行比較,如果待傳遞數(shù)據(jù)與所述變量的值不同,則將所述待傳遞數(shù)據(jù)重新賦值給所述變量。
[0018]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性src設(shè)置為子頁(yè)面的鏈接之后,還包括:
[0019]通過對(duì)所述iframe元素的css樣式的設(shè)置使所述子頁(yè)面不顯示。
[0020]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,以統(tǒng)一資源定位符的locat1n, hash作為標(biāo)識(shí)觸發(fā)子頁(yè)面DOM操作,完成不同域的父頁(yè)面和子頁(yè)面之間的腳本調(diào)用,包括:
[0021]在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性src設(shè)置為子頁(yè)面的鏈接;
[0022]將觸發(fā)子頁(yè)面DOM操作的標(biāo)識(shí)放在屬性src的統(tǒng)一資源定位符的locat1n, hash中;
[0023]在子頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中所述標(biāo)識(shí)是否有變化,如果有變化,將有變化的所述標(biāo)識(shí)賦值給所述變量;
[0024]子頁(yè)面根據(jù)所述變量的新賦值進(jìn)行子頁(yè)面中相關(guān)的腳本調(diào)用的DOM操作。
[0025]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,在子頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中所述標(biāo)識(shí)是否有變化,如果有變化,將有變化的所述標(biāo)識(shí)賦值給所述變量,包括:
[0026]在子頁(yè)面中定義一個(gè)變量,子頁(yè)面每隔預(yù)設(shè)時(shí)間獲取locat1n, hash中的所述標(biāo)識(shí),將獲取到的標(biāo)識(shí)與所述變量的值進(jìn)行比較,如果所述標(biāo)識(shí)與所述變量的值不同,則將所述標(biāo)識(shí)重新賦值給所述變量。
[0027]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,通過統(tǒng)一資源定位符的locat1n, hash攜帶待傳遞的數(shù)據(jù)在不同域的父頁(yè)面和子頁(yè)面之間傳遞數(shù)據(jù)中,當(dāng)父頁(yè)面獲取子頁(yè)面的待傳遞數(shù)據(jù)時(shí),包括:
[0028]在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性src設(shè)置為子頁(yè)面的鏈接;
[0029]設(shè)置一個(gè)與所述父頁(yè)面屬于同一域的代理頁(yè)面,在子頁(yè)面設(shè)置一個(gè)隱藏的iframe元素,并將所述隱藏的iframe元素的屬性src設(shè)置為所述代理頁(yè)面的鏈接;
[0030]子頁(yè)面將所述待傳遞的數(shù)據(jù)放在所述隱藏的iframe元素的屬性src的統(tǒng)一資源定位符的locat1n, hash中;
[0031]在代理頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中待傳遞數(shù)據(jù)是否有變化,如果有變化,將有變化的待傳遞數(shù)據(jù)賦值給所述變量;
[0032]定位到父頁(yè)面待變化的元素,將所述變量的值放到所述待變化的元素中。
[0033]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,在代理頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中待傳遞數(shù)據(jù)是否有變化,如果有變化,將有變化的待傳遞數(shù)據(jù)賦值給所述變量,包括:
[0034]在代理頁(yè)面中定義一個(gè)變量,代理頁(yè)面每隔預(yù)設(shè)時(shí)間獲取locat1n, hash中的待傳遞數(shù)據(jù),將獲取到的待傳遞數(shù)據(jù)與所述變量的值進(jìn)行比較,如果所述待傳遞數(shù)據(jù)與所述變量的值不同,則將所述待傳遞數(shù)據(jù)重新賦值給所述變量;
[0035]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,以統(tǒng)一資源定位符的locat1n, hash作為標(biāo)識(shí)觸發(fā)父頁(yè)面DOM操作,完成不同域的父頁(yè)面和子頁(yè)面之間的腳本調(diào)用,包括:
[0036]在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性src設(shè)置為子頁(yè)面的鏈接;
[0037]設(shè)置一個(gè)與所述父頁(yè)面屬于同一域的代理頁(yè)面,在子頁(yè)面設(shè)置一個(gè)隱藏的iframe元素,并將所述隱藏的iframe元素的屬性src設(shè)置為代理頁(yè)面的鏈接;
[0038]子頁(yè)面將觸發(fā)父頁(yè)面DOM操作的標(biāo)識(shí)放在所述隱藏的iframe元素的屬性src的統(tǒng)一資源定位符的locat1n, hash中;
[0039]在代理頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中所述標(biāo)識(shí)是否有變化,如果有變化,將有變化的標(biāo)識(shí)賦值給所述變量;
[0040]代理頁(yè)面根據(jù)所述變量的新賦值進(jìn)行父頁(yè)面中相關(guān)的腳本調(diào)用的DOM操作。
[0041]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互方法中,在代理頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中所述標(biāo)識(shí)是否有變化,如果有變化,將有變化的標(biāo)識(shí)賦值給所述變量,包括:
[0042]在代理頁(yè)面中定義一個(gè)變量,代理頁(yè)面每隔預(yù)設(shè)時(shí)間獲取locat1n, hash中的標(biāo)識(shí),將獲取到的標(biāo)識(shí)與所述變量的值進(jìn)行比較,如果所述標(biāo)識(shí)與所述變量的值不同,則將所述標(biāo)識(shí)重新賦值給所述變量。
[0043]根據(jù)本申請(qǐng)的另一面還提供一種克服瀏覽器同源策略限制的交互設(shè)備,該設(shè)備包括:
[0044]第一裝置,用于通過統(tǒng)一資源定位符的locat1n, hash攜帶待傳遞的數(shù)據(jù)在不同域的父頁(yè)面和子頁(yè)面之間傳遞數(shù)據(jù);
[0045]和/或第二裝置,用于以統(tǒng)一資源定位符的locat1n, hash作為標(biāo)識(shí)觸發(fā)父頁(yè)面或子頁(yè)面DOM操作,完成不同域的父頁(yè)面和子頁(yè)面之間的腳本調(diào)用。
[0046]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互設(shè)備中,所述第一裝置,用于子頁(yè)面獲取父頁(yè)面的待傳遞數(shù)據(jù)時(shí),包括:
[0047]第---模塊,用于在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性
src設(shè)置為子頁(yè)面的鏈接;
[0048]第一一二模塊,用于將所述待傳遞的數(shù)據(jù)放在屬性src的統(tǒng)一資源定位符的locat1n, hash 中;
[0049]第--三模塊,用于在子頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中待傳遞數(shù)據(jù)是否有變化,如果有變化,將有變化的待傳遞數(shù)據(jù)賦值給所述變量。
[0050]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互設(shè)備中,所述第一一三模塊,用于在子頁(yè)面中定義一個(gè)變量,子頁(yè)面每隔預(yù)設(shè)時(shí)間獲取locat1n, hash中的待傳遞數(shù)據(jù),將獲取到的待傳遞數(shù)據(jù)與所述變量的值進(jìn)行比較,如果待傳遞數(shù)據(jù)與所述變量的值不同,則將所述待傳遞數(shù)據(jù)重新賦值給所述變量。
[0051]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互設(shè)備中,第---模塊,還用于通過對(duì)所述iframe元素的css樣式的設(shè)置使所述子頁(yè)面不顯示。
[0052]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互設(shè)備中,所述第二裝置,用于以統(tǒng)一資源定位符的locat1n, hash作為標(biāo)識(shí)觸發(fā)子頁(yè)面DOM操作,完成不同域的父頁(yè)面和子頁(yè)面之間的腳本調(diào)用時(shí),包括:
[0053]第二一一模塊,用于在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性src設(shè)置為子頁(yè)面的鏈接;
[0054]第二一二模塊,用于將觸發(fā)子頁(yè)面DOM操作的標(biāo)識(shí)放在屬性src的統(tǒng)一資源定位符的 locat1n, hash 中;
[0055]第二一三模塊,用于在子頁(yè)面中定義一個(gè)變量,監(jiān)聽locat1n, hash中所述標(biāo)識(shí)是否有變化,如果有變化,將有變化的所述標(biāo)識(shí)賦值給所述變量;
[0056]第二一四模塊,用于子頁(yè)面根據(jù)所述變量的新賦值進(jìn)行子頁(yè)面中相關(guān)的腳本調(diào)用的DOM操作。
[0057]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互設(shè)備中,所述第二一三模塊,用于在子頁(yè)面中定義一個(gè)變量,子頁(yè)面每隔預(yù)設(shè)時(shí)間獲取locat1n, hash中的所述標(biāo)識(shí),將獲取到的標(biāo)識(shí)與所述變量的值進(jìn)行比較,如果所述標(biāo)識(shí)與所述變量的值不同,則將所述標(biāo)識(shí)重新賦值給所述變量。
[0058]進(jìn)一步的,上述克服瀏覽器同源策略限制的交互設(shè)備中,所述第一裝置,用于父頁(yè)面獲取子頁(yè)面的待傳遞數(shù)據(jù)時(shí),包括:
[0059]第一二一模塊,用于在父頁(yè)面設(shè)置一個(gè)iframe元素,并將所述iframe元素的屬性src設(shè)置為子頁(yè)面的鏈接;
[0060]第一二二模塊,用于設(shè)置一個(gè)與所述父頁(yè)面屬于同一域的代理頁(yè)面,在子頁(yè)面設(shè)置一個(gè)隱藏的iframe元素,