Web 服務器如何提供 window.name 數(shù)據(jù)
為了讓 Web 服務器實現(xiàn) window.name,服務器應該只尋找請求中是否包含 windowname 參數(shù)。如果包含了 windowname 參數(shù),服務器應該返回一個設置了 window.name 字符串值的 HTML 文檔,回應此請求并傳送到客戶端。例如: http://www.planabc.net/getdata.html?windowname=true
如果服務器想用 Hello 響應客服端,它應該返回一個 HTML 頁面:
<html> <script type="text/javascript"> window.name="Hello"; </script> </html>
同樣也可以轉(zhuǎn)換為 JSON 數(shù)據(jù):
<html> <script type="text/javascript"> window.name='{"foo":"bar"}'; </script> </html>
如果你手動創(chuàng)建資源,書寫大量的多行的 JSON 對象為一個引用的字符串應該是比較困難的并且易于出錯的?梢允褂眠@樣的 HTML 樣例簡單的創(chuàng)建 JSON 數(shù)據(jù),將會轉(zhuǎn)換為一個 JSON 字符串而無需手動轉(zhuǎn)義 JSON 為字符串:
<html> <script type="\'text/javascript\'"> window.name = document.getElementsByTagName("script")[0].innerHTML.match(/temp\s*=([\w\W]*)/)[1]; temp= { foo:"bar", // put json data here baz:"foo" } </script> </html>
同樣的,如果你想傳遞 HTML/XML 數(shù)據(jù),這里有一個樣例實現(xiàn),而無需手動將這些數(shù)據(jù)轉(zhuǎn)換成字符串:
<html> <body> <p id="content"> some <strong>html/xml-style</strong>data </p> </body> <script type="text/javascript"> window.name = document.getElementById("content").innerHTML; </script> </html>
window.name 傳輸技術相比其他的跨域傳輸?shù)囊恍﹥?yōu)勢:
- 它是安全的。也就是說,它和其他的基于安全傳輸?shù)?frame 一樣安全,例如 Fragment Identifier messaging (FIM)和 Subspace。(I)Frames 也有他們自己的安全問題,由于 frame 可以改變其他 frame 的 location,但是這個是非常不同的安全溢出,通常不太嚴重。
- 它比 FIM 更快,因為它不用處理小數(shù)據(jù)包大小的 Fragment Identifier ,并且它不會有更多的 IE 上的“機關槍”聲音效果。它也比 Subspace 快,Subspace 需要加載兩個 Iframe 和兩個本地的 HTML 文件來處理一個請求。window.name 僅需要一個 Iframe 和一個本地文件。
- 它比 FIM 和 Subspace 更簡單和安全。FIM 稍微復雜,而 Subspace 非常復雜。Subspace 也有一些額外的限制和安裝要求,如預先聲明所有的目標主機和擁有針對若干不同特殊主機的 DNS 入口。window.name 非常簡單和容易使用。
- 它不需要任何插件(比如 Flash)或者替代技術(例如 Java)。
本文鏈接:http://m.95time.cn/tech/web/2008/6147.asp
出處:藍色理想
責任編輯:bluehearts
上一頁 使用window.name解決跨域問題 [1] 下一頁
◎進入論壇網(wǎng)頁制作、WEB標準化版塊參加討論,我還想發(fā)表評論。
|