有一个页面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)。
我知道框架是邪恶的,但这是怎么写的…任何想法?
谢谢!
解决方法
如果您有需要最新一代浏览器的奢侈品,您可以使用其他其他答案中提到的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页面。
如果您将页面的域降低到公共根域,则将内部版本暴露给在常见根域上运行的脚本,并将其域的脚本从其域降级到公用根。如果一个其他子域中的服务器遭到入侵,它将可以访问您的脚本的内部部件,因此也可能会损坏您的子域。