因此,我们目前正在开发一个RCP应用程序,该应用程序集成了SWT浏览器。我们希望在浏览器和RCP应用程序之间实现某种通信。主要是我们希望如果用户按下Web界面中的按钮会触发事件,以便RCP应用程序可以侦听并相应地处理它(例如,将在RCP应用程序内部打开特定视图)。
您将如何解决这个问题?我已经尝试在浏览器上添加addMouseListener()。但是mouseevents并没有太大帮助,因为它们不携带任何有关按下Web界面中哪个元素的信息...
希望您能帮助我/为我提供可能的解决方案!
编辑: 以下是一些有关如何实例化浏览器的示例:
public class BrowserView extends ViewPart {
Browser browser;
private static final Log LOG = LogFactory.getLog(BrowserView.class);
@Override
public void createPartControl(Composite parent) {
this.browser = new Browser(parent, SWT.NONE);
browser.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent e) {
}
@Override
public void mouseDown(MouseEvent e) {
// do something with the event
}
@Override
public void mouseDoubleClick(MouseEvent e) {
}
});
}
@Override
public void setFocus() {
// Do nothing
}
public void setUrl(String url) {
this.browser.setUrl(url);
}
}
因此,主要是我们在特定的组合中创建一个浏览器。我们试图将处理程序添加到mouseDown事件,但是它没有太大帮助,因为该事件不包含有关在浏览器内触发了哪个按钮的任何信息。 我们如何从有关浏览器的事件中获取扩展信息? 假设浏览器中的内容具有Button1,Button2和Button3。我们想要类似
public void mouseDown(MouseEvent e) {
switch (e.getType.getName()) {
case "Button1": handleButton1();
break;
case "Button2": handleButton2();
break;
case "Button3": handleButton3();
break;
}
}
我很清楚这是其他可能的解决方案。这只是我的幼稚方法
答案 0 :(得分:1)
您可以修改网页以通过javascript调用Java函数。
您可以创建一个Java函数,该函数可以通过创建BrowserFunction
:从浏览器中调用:
BrowserFunction.function
方法简单的例子:
带有按钮的网页,该按钮在按下时会调用Java函数(page.html)
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="javaFunction()">Click Me!</button>
</body>
</html>
该Java代码显示如何从SWT浏览器显示网页。按下按钮后,将调用function
并在控制台上打印:
public class BrowserTest {
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
Browser browser = new Browser(shell, SWT.NONE);
browser.setUrl("file:/C:/BrowserTest/page.html");
new JavaFunction(browser, "javaFunction");
shell.pack();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
private static class JavaFunction extends BrowserFunction {
JavaFunction(Browser browser, String name) {
super(browser, name);
}
@Override
public Object function(Object[] arguments) {
System.out.println("Button pressed!");
return null;
}
}
}