从 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 数据库?