html - 帧之间如何通信?

标签 html frames html-frames

我正在维护一个类似这样的应用程序:

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

现在,他们希望当 B 中的一个选项被点击时,整个页面被重定向到 A 中的另一个页面。问题是 A 的 url 类似于 www.client.A.com/Order/Details/123,当我们点击 be 时,它​​应该重定向到类似 www.client.A.com/Order/Edit/123 的内容,但 B 对 A 一无所知. 它不知道当前选择了哪个顺序 # 或关于 A 的任何信息。拥有框架 B 的页面 A 确实知道。

目前我的解决方案是重定向到 AllOrders,比如 client.MyCompany/Orders

但由于 B 不知道哪个 client 正在调用它(它是一个 Multi-Tenancy 应用程序),我将把它添加到 webconfig 中。 (因此每个客户端都有自己的具有不同值的 webconfig)。

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

我知道框架是邪恶的,但它是这样写的……有什么想法吗?

谢谢!

最佳答案

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

如果您有幸需要最新一代的浏览器,您可以使用此处其他答案之一中提到的邮寄技术。如果您需要支持旧版浏览器,您可以在浏览器中使用跨域客户端脚本技术传递少量信息。一个例子是使用iframe在外部页面A和内部页面B之间传递信息。这并不容易,涉及的步骤很多,但可以做到。我写了一个article不久前关于这个。

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

如果 A 和 B 位于同一根域的不同子域中,您可能有机会将该域“降低”到一个共同的根。例如,如果外部页面 A 托管在子域 A.foo.bar.com 中,而 B 托管在子域 foo.bar.com 中,那么您可以将页面 A 中的域降低到 foo.bar.com(通过分配window.domain = "foo.bar.com"在 A 的脚本中)。然后页面 A 将作为页面 B 的对等方,然后两者可以根据需要访问彼此的数据,即使 A 在技术上是从与 B 不同的域提供服务的。我在 domain lowering 上写了一篇文章。 ,也是。

域降低只能剥离最里面的子域以在根域的上下文中运行。您无法将 A.foo.bar.com 更改为 abc.com。

将域降级为公共(public)根域也存在轻微风险。当您在其自己的子域中操作您的页面时,您的 html 和脚本将与公共(public)根域之外的其他子域隔离开来。如果其他子域之一中的服务器受到威胁,它不会真正影响您的 html 页面。

如果您将页面的域降低到公共(public)根域,则您会将您的内部结构暴露给在公共(public)根域上运行的脚本以及来自其他子域的脚本,这些子域也已将其域降低到公共(public)根。如果其他子域之一中的服务器受到威胁,它将可以访问您脚本的内部,因此它也可能已经破坏了您的子域。

关于html - 帧之间如何通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32449245/

相关文章:

javascript - 有人能告诉我我对 HTML/JS 代码的解释是否正确吗?

c# - 在哪里可以找到一套标准的网页设计规则?

html - 使图像响应父容器的特定高度

javascript - 计算 HTML5 Canvas 中的总帧丢失

html - 如何使用框架创建有效的 HTML5?

html - 使用动画 css 属性不工作使 div 间歇性出现

windows - 如何在 Windows 中从 WLAN 捕获信标帧?

python - 具有网格管理器问题的 Tkinter 嵌套框架

asp.net - 如何将 ASP.NET 网站(或 Web 应用程序)嵌入到另一个网站中?