2

我在跨域 iframe hack 中遇到了一些麻烦。

我的页面上有一个 iframe“if1”,其中包含另一个 iframe“if2”。

“顶部”页面在域 A 上运行。if1 的页面在域 B 上运行。if2 的页面在域 A 上运行。

我想要做的是:在 if1 中运行身份验证,将结果令牌作为哈希传递给 if2 的 url 并加载 if2。当加载 if1 的页面时,令牌已经通过身份验证,我只是添加了 if2 和已经生成的 url,如下所示:

<iframe name="if2" id="if2" src="http://example.com/testing#token=8927348962028" onload="javascript:alert('loaded');" onerror="javascript:alert('unable to load iframe');" ></iframe>

现在, if2 根本不加载,它只是保持白色。我总是收到“无法加载 iframe”的警报。但这仅在 if1 嵌入“顶部”页面时发生。当我在浏览器的另一个选项卡中简单地加载 if1 的内容时,if2 会完美加载。

是否有一些政策可以阻止加载二级 iframe?还是我错过了什么?

4

1 回答 1

5

我找到了解决我的问题的方法。

如果您使用加载页面 B 的 iframe 加载页面 A 并在其中再次加载页面 A 的 iframe,则您有一个循环,导致页面 A 加载页面 B 等等。

在我的情况下,浏览器停止加载第二个 iframe(再次加载页面 A 的 iframe)。这似乎是防止这种循环的正常行为。

我只是在 if2 的 url 中添加了一个 ?innerframe=true 参数,并在设置该参数时阻止了 if1 加载。这样循环消失了,问题也消失了。

@Rune:感谢您的帮助,fiddle 的链接对解决这个问题非常有帮助。

于 2013-01-23T13:45:14.363 回答