Noo*_*der 9 html javascript security iframe jquery
这有点复杂,请耐心等待.网站A有一个包含网站B的iframe,网站B有一个包含网站C的iframe.
网站C上有一个按钮,点击后,我想刷新网站B的网址.下面是从网站C刷新网站B的javascript,它位于iframe中
function url_update(id){
var host = 'https://websiteb.com ';
var myHost = host.split('/');
if (id != "" && myHost != ""){
try {
if (id.substring(0,1) != '/'){
id = '/' + id;
}
var dft_url = myHost[0] + '//' + myHost[2] + id;
window.parent.location.href = dft_url;
} catch(e){alert("Cannot go to the desired url location: " + dft_url);}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当行"window.parent.location.href = dft_url;"时 得到执行,我收到以下错误:
Unsafe JavaScript attempt to initiate navigation for frame with URL
'https://websiteB.com' from frame with URL
'https://websiteC.com'. The frame attempting navigation is
neither same-origin with the target, nor is it the target's parent or
opener.
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会发生这种情况以及如何解决这个问题.任何帮助将不胜感激.
我做了一些研究,大多数人声称这是一个原始问题,但是如果我拿出网站A,意思是网站B只有一个包含网站C的iframe,那么上面的代码就可以了.即使他们有不同的域名
Jul*_*ire 11
您可以在Chromium源代码的注释中找到有关此行为的说明.看这里:
基本上,顶级窗口对导航的限制比其他窗口少.请参阅非顶部窗口的限制:
文档可以导航其后代帧,或者更一般地,如果文档与任何帧的祖先(在帧层次结构中)处于相同的原点,则文档可以导航帧.
顶窗:
具体来说,如果该框架打开文档或文档与任何顶级框架的开启者的祖先(在框架层次结构中)是同源的,则文档可以导航顶级框架.
原因是:
顶级框架比其他框架更容易导航,因为它们在地址栏中显示其URL(在大多数浏览器中).
所以基本上,对于非顶部窗口,它绝对需要是相同的原点以允许导航,但对于顶部窗口,由该窗口打开的框架可以导航,即使它不是同源.这似乎是你所面临的问题,当B是顶部时,相同的起源不适用,但是当它不是顶部时,它适用.
据此,我不确定是否有直截了当或完全没有解决方案.
| 归档时间: |
|
| 查看次数: |
14431 次 |
| 最近记录: |