iframe嵌入第三方网站跨域(iframe跨域调用js)

http://www.itjxue.com  2023-01-28 00:59  来源:未知  点击次数: 

开发笔记:iframe 内部如何实现跨域请求(解决方案)

在iframe中,是需要请求不同域名的数据,但实际情况,浏览器出于安全考虑,是不允许访问除iframe src="url" / 中的url的其他不同域名的数据。

我们可以借助 Nginx (需要与iframe请求的域名所在的Nginx), 配置一个代理地址,进行中间跳转,即可解决跨域问题。

利用iframe引入需要认证的跨域页面

1、需求描述

一个页面中包含两部分内容,一块内容是本系统中的页面,要展示一些本系统中后端接口返回的数据的内容,一块完全是另一个项目的页面,但这个页面是需要认证信息才能打开的,因此会涉及到跨域信息传递的问题,iframe 引入的页面能拿到主站页面传递给它的认证信息,然后正常展示出来页面。

2、解决思路

实现的时候考虑使用iframe引入第三方页面的方式。

1) 传递认证信息的方式—postMessage

对于主站向iframe引入的页面传递认证信息,可以通过 postMessage 来进行,但是要能够 postMessage 传递认证信息的前提是iframe 引入的页面能够正常显示,但是事实上没有认证信息,iframe引入的页面是不能正常显示的,这貌似就陷入了一个死循环。

2)传递认证信息—cookie

另一个想到的方法就是 cookie 传递信息了,这个引入的页面和当前的主站页面有一个关系就是,引入的页面是主站的子域,那么写cookie的时候有一个规则,cookie 的 domain 写成 .aaa.com写到主站,那么 test.aaa.com 和aaa.com 页面都可以获取到cookie信息并利用起来。

上面的第二种方法是已经经过实践检验的,在打开主站的情况下,cookie 的domain设置成.xxx.com的方式,浏览器打开子域的页面,子域页面中是可以拿到这个cookie的信息的。

但是当前的问题并不是直接在浏览器中打开页面,而是在主站中以 iframe 的方式引入页面,这样也能看到吗??

3、实践

有句话是这么说的,实践是检验真理的唯一标准,经过实践检验后,第二种方法是可行的,在浏览器中保存过一个页面的cookie之后,无论是直接打开一个页面,还是别的页面通过 iframe 引入该页面,cookie都是可以被利用到的。

4、思考

所以 cookie 其实是存在浏览器中的,只要浏览器中的这个cookie 文件保存,并且cookie是有效的,那么在当前页面引入与本页面无关的页面,都是可以的,csrf 跟这个有什么关系呢?

其实觉得自己写了一堆智障的东西,以后还是要多写,多研究,才能真正知道自己有多浅薄。

如何用js操控iframe引用的跨域网站

body

button?id="btn"submit/button

iframe?src=""?id="frame"?frameborder="0"/iframe

/body

script

var?btn=document.getElementById('btn');

var?fr=document.getElementById('frame');

btn.addEventListener("click",?function()?{

???? fr.contentWindow.location.href="";

});

/script

给按钮绑定个事件吧?然后执行iframe.location.href="新闻页地址";

iframe跨域问题 嵌入别人网站不显示

是需要登录到另一个系统,才可以看见的页面。

如果只是跨域请求,则到此就可以实现功能了,不过如果你是需要登录到另一个系统,才可以看见的页面,那么还需要下面的步骤:

因为如果是登录的话,那么一般来说,系统会将信息存储到session中,那么session会有一个JsessionId 存储在cookie中,所以,就出现了,虽然正常访问页面,正常登录,但是 就是没有权限访问里面的页面,会自动跳到登录页面。很奇怪,百思不得其解?

看到页面其实是进去了,但是突然又弹出来,突然想到会不会是cookie没有跨域,导致里面的页面无法获取数据,认为是没有登录。

最后经过尝试,果然是cookie需要设置跨域,才可以成功登录进去。

js如何操作iframe的跨域问题

A域名下的页面index.htm中内嵌了一个iframe页面,iframe内引用的是B域名的sub-index.htm页面,但是为了避免出

现在index.htm页面中出现滚动条,需要明确知道sub-index.htm页面的高度和宽度,可是sub-index.htm的页面内容是不可控的,可能会根据不同用户页面大小会不一样;问题就是如何把sub-index.htm页面的高度和宽度传递给index.htm页面?

具体解决:

1、在index.htm页面中声明一个js函数process(height, width);用来实现设置页面内iframe的高度和宽度;

2、

在sub-index.htm页面中再内嵌一个隐藏的iframe,iframe的src指向A域名下的页面ex.htm?height=xx

width=yy,该页面没有任何内容,只是用来传递sub-index.htm页面加载完之后的宽度和高度这两个数据的,页面内js拿到request

中的参数之后直接调用parent.parent.process(height, width);完成对父页面宽度和高度的设置;

如图:

(责任编辑:IT教学网)

更多