關於javascript兩個小問題總結

1.javascript跨域

   有一個需求:一個頁面需要嵌入(iframe)另一個頁面,而兩個頁面不在同一個域中,父頁面想通過javascript調用訪問子頁面的javascript或者DOM。就存在了跨域安全性的問題。javascript本身是不支持跨域的,因爲會產生很多安全隱患。

 

在網上可以搜到很多變相實現跨域的方式,如:

單向跨域:JSONP,Access Control,window.name,server proxy

雙向跨域:document.domain,FIM – Fragment Identitier Messaging,Flash LocalConnection,window.postMessage,Cross Frame

 

跨域的方法很多,不同的應用場景我們都可以找到一個最合適的解決方案。比如單向的數據請求,我們應該優先選擇JSONP或者window.name,雙向通信我們採取Cross Frame,在未與數據提供方沒有達成通信協議的情況下我們也可以用server proxy的方式來抓取數據。

 

試過很多方法,都存在各式各樣的一些問題,而且本人覺得不要去欺騙瀏覽器實現跨域,會造成系統不穩定,就算現在沒有任何問題,可以正常工作,但當IE補丁打上,系統不可避免出現問題。

 

2.javascript與java的通信亂碼

場景:javascript中通過ajax訪問java後臺,java後臺返回一個字符串,這個字符串包含有":"、","、中文字符。ajax回調函數中接受到此返回值,會出現亂碼。

 

解決方法:java後臺用URLEncoder.encode(str, "UTF-8")進行加密,javascript中用decodeURIComponent(data)進行解密。

 

之前javascript端用過decodeURI(data)進行解密,不過發現冒號":"和逗號","沒有解密成功,仍是''%3A''和"%2C",原因是:

所以這裏只能用decodeURIComponent(data)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章