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

时间:2017-12-18 04:23:35

标签: javascript iframe gwt

我想允许用户输入他们的网址并在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”访问跨域框架。

1 个答案:

答案 0 :(得分:3)

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

<强>首先

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

  

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

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

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

<强>第二

了解Same Origin Policy (SOP)

  

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