从 ASP.NET 3.5 应用程序在 IFRAME 中运行 GWT 应用程序(包括 Applet)?

Posted

技术标签:

【中文标题】从 ASP.NET 3.5 应用程序在 IFRAME 中运行 GWT 应用程序(包括 Applet)?【英文标题】:Running a GWT application (including Applets) inside an IFRAME from an ASP.NET 3.5 app? 【发布时间】:2010-02-12 17:13:27 【问题描述】:

我们正在考虑将成熟的 GWT(Google Web Toolkit 2.0)应用程序与现有的 ASP.NET 3.5 应用程序集成。我的第一个直觉反应是,这是一个可怕的科学怪人想法。但是,客户一直坚持我们使用第三方开发的这个应用程序。

我几乎无法控制 GWT 应用程序的开发。

我的第一个想法是尝试将其嵌入 iFrame 中。因为 GWT 在 Tomcat/Jakarta 下运行,所以它托管在与 .NET 应用程序不同的服务器上,因此 iFrame src 将指向另一台机器上的 URL。

我需要利用我们自己的 ASP.NET 授权方案来限制对嵌入式 GWT 应用程序的访问。 GWT 应用程序还使用嵌入式 Java 小程序,这些小程序现在似乎无法在 iframe 中运行。 GWT 应用程序调用后端服务器(使用 GWT-RPC?)。

任何人都可以看到这种方法的任何主要问题?当托管在不同的机器上时,GWT 是否可以在 iframe 上工作?

注意:仅添加具有相同名称的 DIV 不起作用!

【问题讨论】:

【参考方案1】:

为了解释 Tony 所说的,GWT 可以存在于任何页面上。在最低级别,GWT 通过其 ID 或 body 元素挂钩到 div,作为其 RootPanel,并从那里添加小部件。

只需向您的 ASP 页面添加一个 div,例如 <div id="gwt-root" />,并在您的 GWT 代码中,以 RootPanel root = RootPanel.get("gwt-root") 开头。然后,您可以开始向该面板添加小部件以构建页面的 GWT 部分。

您还需要使用 script 标签引入 GWT 生成的代码,如下所示:

<script type="text/javascript" src="gwt-app-name/gwt-app-name.nocache.js">

此外,如果您愿意,GWT 可以使用 JSNI 使用常规 JavaScript 与页面的其余部分进行交互。

【讨论】:

请在原始问题中注明。我无权访问原始 GWT 源,它托管在另一台机器上,所以按照你的建议做实际上是 XSS 问题,对吗?由于我无法在其他服务器上引用 *.nocache.js 文件。 您可以从任何站点引用 JS 文件(只要该文件是可读的)。只需将您的script 标记更改为http://otherserver.com/gwt-app-name/gwt-app-name.nocache.js 的绝对URL。您可能在发出 GWT-RPC 请求时遇到问题……在这种情况下,您可以照您说的做,在另一台服务器上托管的 iframe 中运行 GWT 应用程序。【参考方案2】:

您不需要 IFRAME。编写您的应用程序,以便主面板托管在具有特定 ID 的 div 中。如果您的 ASP.net 可以提供具有相同 id 的 div,那么您所要做的就是包含生成的 JavaScript 文件(+ 一些样式表),您的应用程序将显示在 div 中。

【讨论】:

以上是关于从 ASP.NET 3.5 应用程序在 IFRAME 中运行 GWT 应用程序(包括 Applet)?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 3.5 - 在 pdf 查看器中直接从流中打开 PDF

如何在 ASP.NET Web 应用程序中为 Windows Mobile 创建 SQL Compact 3.5 数据库?

log4net 与 ASP.NET 3.5 问题

在 .NET 3.5 ASP.NET MVC 应用程序中使用 Google Maps API

ASP.Net 3.5 中的 CORS

如何在我的 .NET 3.5 Web 应用程序中安装和使用 ASP.NET AJAX 控件工具包?