GWT通过访问跨源帧阻止具有原点“http:// localhost”的帧

问题描述 投票:0回答:1

我想允许用户输入他们的网址并在iframe中浏览。点击确认按钮后,我将从iframe获取网址浏览。

IFrameElement frame = IFrameElement.as(DOM.createIFrame());
frame.setSrc("http://www.example.com"); //set the url of user enter
VerticalPanel ver = new VerticalPanel();
ver.getElement().appendChild(frame);

// After they click the confirm button, get the url from iframe
Window.alert(frame.getContentDocument().getURL());

但是我从iframe获取网址后出错了

例外:com.google.gwt.event.shared.UmbrellaException:捕获异常:(SecurityError):阻止具有原始“http://localhost”的帧访问跨源帧。

javascript iframe gwt
1个回答
3
投票

简而言之:你不应该这样做,你不能这样做。


第一:

有些页面的作者根本不想让他们的页面显示在一个框架中。以Facebook为例,你会得到:

拒绝在一个框架中显示'https://www.facebook.com/',因为它将'X-Frame-Options'设置为'deny'。

还可以检查(使用脚本)页面是否在框架中并且“突破”并进入主窗口,http://www.interia.pl/就是一个例子。

因此,有些页面无法在框架中显示。


第二:

了解Same Origin Policy (SOP)

简单地说,SOP声明在网页上运行的JavaScript代码可能不会与不是源自同一网站的任何资源交互。此安全策略存在的原因是为了防止恶意Web编码人员创建窃取Web用户信息或破坏其隐私的页面。虽然非常必要,但这项政策也会产生使网络开发人员生活困难的副作用。

© www.soinside.com 2019 - 2024. All rights reserved.