不允许跨源框架嵌入iframe

7

您好,我的页面中有两个iframe,其中一个可以正常工作,另一个则会出现错误提示“不允许跨域框架”。以下是示例代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org   /TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script type="text/javascript" src="../script/jquery.js"></script>
<title>Cancellation Policy</title>
</head>
<body>

<span>Some text goes here.</span>
<br /><br />
<iframe src="http://www.w3schools.com/"></iframe>
<iframe src="https://www.google.co.in/?gws_rd=cr&ei=-bmBUo24M6npiAeepICYAg"></iframe>

</body>
</html>

任何帮助都会非常有用。


你期望什么样的帮助?你想把谷歌放在一个框架里,但是谷歌表示他们不想要。你不能这样做。还有什么需要说的吗? - Quentin
可能是如何在iframe中显示google.com?的重复问题。 - Quentin
2个回答

1

嘿,我找到了解决问题的方法。 问题是因为域受限制,其他域无法访问,因为它们可能会黑掉这里的信息,这里是link,其中解释了跨域策略。

我们可以通过获取HTML内容并在我们的域中显示它来克服这个问题,而不是直接访问其他域。这里是link,其中解释了这一点。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org   /TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<script src="http://code.jquery.com/jquery-1.2.3.min.js"></script>
<title>Cancellation Policy</title>
</head>
<body>

<span>Some text goes here.</span>
<br /><br />
<iframe src="http://www.w3schools.com/"></iframe>
<iframe src="https://www.google.co.in/?gws_rd=cr&ei=-bmBUo24M6npiAeepICYAg"></iframe>

<script>
        var url = 'https://www.google.co.in/?gws_rd=cr&ei=-bmBUo24M6npiAeepICYAg';
        $.getJSON('http://whateverorigin.org/get?url=' + encodeURIComponent(url) + '&callback=?', function(data){
            var html = ""+data.contents;

            /* Replace relative links to absolute ones */
            html = html.replace(new RegExp('(href|src)="/', 'g'),  '$1="'+url+'/');

            $("#siteLoader").html(html);
        });
    </script>
    <div id="siteLoader">
        <i>Loading&hellip;</i>
    </div>
</body>
</html>

可以实现,但问题在于我们甚至无法向该页面发送任何请求或接收到任何响应。 - Zeb

-3

我认为您无法在 iframe 中打开安全网站。即以 https:// 开头的网站不能在 iframe 中打开。您可以在 iframe 中打开 w3school.com,但不能打开 https://twitter.comhttps://facebook.comhttps://google.com 等。

我尝试在 iframe 中打开 google.co.in 时遇到了以下错误:

Load denied by X-Frame-Options: https://www.google.co.in/ does not permit cross-origin framing.

1
只有在您自己的网站不支持SSL时才为真。 - phil294
这是...具有误导性的错误。由于“混合内容”,您无法从HTTPS域打开HTTP站点,但Google的问题是完全不同的问题。许多域,特别是那些担心安全的域,在其服务器设置中设置了一个参数,告诉浏览器拒绝允许其网站在iframe中显示。如果是这种情况,则会出现错误“X-Frame-Options拒绝加载:https://www.google.co.in/不允许跨源框架。” - Eliezer Berlin
否则,有人可能会从Paypal显示一个iframe,并在iframe上方放置一个透明的覆盖层,因此那些认为他们正在点击iframe并输入Paypal密码的用户实际上是在点击您的覆盖层并将其Paypal密码输入到您的网站中。 - Eliezer Berlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接