我使用了Java和SWT' Browser
。我准备了两个系统版本的应用程序,首先是针对Windows的OSX第二版。
两个系统都是64位
SWT需要不同的系统用于不同的系统,所以在Maven我声明了两个
<profile>
<id>windows-deploy</id>
<dependencies>
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
<version>4.6.1</version>
</dependency>
</dependencies>
</profile>
<profile>
<id>osx-deploy</id>
<dependencies>
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
<version>4.6.1</version>
</dependency>
</dependencies>
</profile>
在浏览器中我加载页面并单击按钮(创建新窗口)但我不想打开新窗口,只重新加载实际浏览器哪个新页面,我就像在下面的代码中那样做了
browser.addOpenWindowListener(new OpenWindowListener() {
public void open(WindowEvent event) {
Log.debug(TAG + "<>", "Open new page!");
event.browser = browser;
}
});
在OS X系统上它运行良好。
但是当我尝试使用Windows时,点击按钮后旧页面不会改变。我检查了日志和消息&#34;打开新页面!&#34;写了但没有任何反应(新页面不像OS X那样加载)。我可以通过WebKit和browser.refresh()
刷新浏览器在加载页面之后刷新,但是有旧的内容(不像OS X中那样是新的)。
我调试并检查了来自SWT库的WebKit event.browser = browser;
之后发生的事情。
我应该怎样做才能在Windows上获得与OS X相同的效果?
答案 0 :(得分:1)
<强>分辨强>
问题出在图书馆。在OSX系统上,当我们更改event.browser
对象时,会自动检测到它并且它正常工作,但在Windows系统上我们需要像下面的代码片段一样添加到浏览器VisibilityWindowListener
并正常工作:)
browser.addVisibilityWindowListener(new VisibilityWindowListener() {
public void hide(WindowEvent event) {
}
public void show(WindowEvent event) {
Browser browser = (Browser) event.widget;
Shell shell = browser.getShell();
if (event.location != null)
shell.setLocation(event.location);
if (event.size != null) {
Point size = event.size;
shell.setSize(shell.computeSize(size.x, size.y));
}
shell.open();
}
});