html – 如何在帧之间进行通信?

前端之家收集整理的这篇文章主要介绍了html – 如何在帧之间进行通信?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在维护一个像这样的应用程序:

有一个页面A与一个框架显示页面B.现在页面B是一个完全不同的产品在一个单独的领域的一部分。

现在,当他们点击B中的一个选项时,他们希望将Whole页面重定向到另一个页面。问题是A的URL类似于www.client.A.com/Order/Details/123,而当我们点击它应该重定向到像www.client.A.com/Order/Edit/123这样的东西,但B不知道什么关于A.它不知道当前选择哪个订单或什么关于A.谁拥有框架B的人知道。

现在我的解决方案一直是重定向到AllOrders,如client.MyCompany / Orders

但由于B不知道哪个客户端正在调用它(它是一个多租户应用程序),我将其添加到webconfig中。 (所以每个客户端都有自己的具有不同值的webconfig)。

我没有找到这个解决方案是最佳的,但我不能想到任何其他的!我已经尝试将A所需的url放在隐藏的Div中(因为A知道所有的信息),然后尝试从B读取该页面的整个DOM以找到它….不幸的是,我只能访问框架B的DOM …(我尝试用jquery)。

我知道框架是邪恶的,但这是怎么写的…任何想法?

谢谢!

解决方法

如果父页面A和iframe页面B在不同的域中,您将无法通过B的父属性访问方法或字段,A中的脚本也不能达到B的内容,也不能共享A和B之间的全局变量。位于页面A和页面B之间的边界是浏览器安全模型的关键部分。这是阻止evil.com包装您的在线银行网页,并通过阅读银行网页的javascript的内部变量窃取您的帐户信息。

如果您有需要最新一代浏览器的奢侈品,您可以使用其他其他答案中提到的postmessage技术。如果您需要支持旧版浏览器,则可能会在浏览器中使用跨域客户端脚本技术传递少量信息。一个例子是使用iframe在外页A和内页B之间传递信息。这不容易,涉及许多步骤,但可以做到。这个时候我写了一个article

您无法监控B的ifbame从父页面A的点击。这是违反浏览器安全策略在多个级别。 (单击劫持,一个)您将无法看到B的URL更改 – 可以写入iframe.src属性来更改URL,但一旦iframe.src指向与A的域不同的域,则A无法再读取iframe.src属性

如果A和B位于相同根域的不同子域中,您可能有机会将域降低到公用根。例如,如果外部页面A托管在子域A.foo.bar.com中,并且B托管在子域foo.bar.com中,则可以将页面A中的域降低到foo.bar.com(通过分配A的脚本中的window.domain =“foo.bar.com”)。然后,页面A将表现为页面B的对等体,然后可以根据需要访问彼此的数据,即使A在技术上来自不同于B的不同域中。我也在domain lowering上写了一篇文章

域降级只能剥离最内层子域以在根域的上下文中操作。您不能将A.foo.bar.com更改为abc.com。

将域降低到公共根域也有一点风险。当您在自己的子域中操作页面时,您的html和脚本将与公共根域上的其他子域隔离。如果某个其他子域中的服务器遭到入侵,则不会真正影响您的html页面

如果您将页面的域降低到公共根域,则将内部版本暴露给在常见根域上运行的脚本,并将其域的脚本从其域降级到公用根。如果一个其他子域中的服务器遭到入侵,它将可以访问您的脚本的内部部件,因此也可能会损坏您的子域。

原文链接:https://www.f2er.com/html/233643.html

猜你在找的HTML相关文章