为了让您了解我想要的内容,请阅读:
假设您有一个GWT页面(mydomain.com#!article
)。该页面包含从DB下载的许多小部件和数据。 DB数据&小部件彼此混合,例如标签可以保存客户名称(客户名称来自DB)。
因此,该页面上的所有内容都是javascript,即当您查看源代码时,您只能看到Javascript。但是,如果您在Chrome&amp ;;中打开该GWT页面将其保存为“myGwtArticlePage.htm
”到您的本地PC,然后重新打开“myGwtArticlePage.htm
”,您可以看到“myGwtArticlePage.htm
”中的所有文本,小部件...都完全相同作为“mydomain.com#!article
”中的那些。
现在,您右键单击&查看源“myGwtArticlePage.htm
”,您不仅会看到Javascript,还会看到所有文字,& Db数据&小部件还在那里。
因此,“myGwtArticlePage.htm
”被称为“mydomain.com#!article
”的Html快照。
你清楚吗?
现在我希望客户端的程序能够捕获“myGwtArticlePage.htm
”的所有文本。
因此,MyArticlePresenter.java(在客户端包中)应该像这样工作:
private AsyncCallback<GetArticleResult> getArticleCallback=new AsyncCallback<GetArticleResult>(){
@Override
public void onSuccess(GetArticleResult result) {
String articleData=result.getArticleData;
//... many other data from DB .....
myLabel.setText(articleData);
//... many other widgets that setText of the DB data ....
// Now what I should do here to get Html Snapshot of "`mydomain.com#!article`" ??
}
}
注意:人们说我可以使用HTMLUnit,但是HtmlUnit在服务器上工作而不是在客户端包中。此外,HTMLUnit无法正确解析GWTP页面。 GWTP是GWTP框架下的GWT app buit。
我希望有人能帮助我提出这个问题。
答案 0 :(得分:0)
客户端代码,根据定义,必须在客户端上运行 - 对于GWT或任何HTML / JS应用程序,这意味着在Web浏览器中。
HtmlUnit 是一个Web浏览器,但是永远不会呈现在屏幕上。您仍然可以询问它当前页面的HTML内容。它完全用Java编写,因此可以在任何JVM中轻松运行,包括服务器。还要考虑PhantomJS,一个无头的Chromium - 你可以编写脚本来截取屏幕截图,导出html等。这是一个本机应用程序,你需要为你的服务器获得正确的构建,你需要连接到致电PhantomJS。
正确配置后,HtmlUnit应与GWT完美配合。 GWTTestCase
默认情况下使用HtmlUnit在浏览器中运行GWT测试而不启动“真正的”浏览器实例。当然,要做到这一点,HtmlUnit必须在普通的JVM中运行,就像运行服务器一样。
也就是说,你不能直接调用客户端代码,而只需在HtmlUnit浏览器中启动HTML / JS(从GWT / Java编译)页面。
要考虑的另一个细节 - 速度。特别是如果您有兴趣被搜索引擎索引,速度很重要有两个原因。首先,搜索引擎将快速点击这些页面,并且当Google / Yahoo / Bing驱动并下载它可以找到的所有URL时,您不希望您的服务器被杀死。其次,服务器可以在对页面进行排名时考虑完成URL的速度。
最后,如果已经使用GWTP,请查看他们的Crawler服务,它似乎旨在使用编码片段过滤我们的URL并转换为#!令牌,然后将其传递给您的GWTP应用程序。有关详细信息,请参阅https://github.com/ArcBees/GWTP/wiki/Crawler-Support。