前端跨域问题及解决方案(2)

2023-04-30 来源:飞速影视
使用document.domain允许子域安全访问其父域时,您需要设置document域在父域和子域中具有相同的值。这是必要的,即使这样做只是将父域设置回其原始值。否则可能会导致权限错误。这里都是a.com。

3、完全不同源的跨域(两个页面之间的通信)


3.1、通过 location.hash 跨域


假设域名 a.com下的文件 cs1.html 要和 jianshu.com 域名下的 cs2.html 传递信息。1、cs1.html 首先创建自动创建一个隐藏的 iframe,iframe 的 src 指向 jianshu.com 域名下的 cs2.html 页面。2、cs2.html 响应请求后再将通过修改 cs1.html 的 hash 值来传递数据。3、同时在 cs1.html 上加一个定时器,隔一段时间来判断 location.hash 的值有没有变化,一旦有变化则获取获取hash值。
注:由于两个页面不在同一个域下 IE、Chrome 不允许修改 parent.location.hash 的值,所以要借助于 a.com 域名下的一个代理 iframe。
优点:1.可以解决域名完全不同的跨域。2.可以实现双向通讯。缺点:location.hash 会直接暴露在 URL 里,并且在一些浏览器里会产生历史记录,数据安全性不高也影响用户体验。另外由于 URL 大小的限制,支持传递的数据量也不大。有些浏览器不支持 onhashchange 事件,需要轮询来获知 URL 的变化。

3.2、通过 window.name 跨域


window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的,每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的。window.name属性的神奇之处在于name 值在不同的页面(甚至不同域名)加载后依旧存在(如果没修改则值不会变化),并且可以支持非常长的 name 值(2MB)。
window.name = data;//父窗口先打开一个子窗口,载入一个不同源的网页,该网页将信息写入。 location = "http://parent.url.com/xxx.html";//接着,子窗口跳回一个与主窗口同域的网址。 var data = document.getElementById("myFrame").contentWindow.name。//然后,主窗口就可以读取子窗口的window.name了。
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号