关于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)

 

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