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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GWT通过访问跨源帧阻止具有原点“http:// localhost”的帧相关的知识,希望对你有一定的参考价值。

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

答案

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


第一:

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

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

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

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


第二:

了解Same Origin Policy (SOP)

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

以上是关于GWT通过访问跨源帧阻止具有原点“http:// localhost”的帧的主要内容,如果未能解决你的问题,请参考以下文章

CDN导致IFrame负载问题

GWT 阻止源为“http://localhost”的框架访问跨域框架

跨源请求被阻止的 CORS - 使用角度 cli 解决 [仅限开发人员] [重复]

跨源请求在 tomcat 8 中被阻止,HTTP 状态代码为 403

来自“https://storage.googleapis.com”的字体已被跨源资源共享策略阻止加载

从源“http://localhost:4200”访问“http://localhost:1111/...”的 XMLHttpRequest 已被 CORS 策略阻止: