所以我们目前正在开发一个集成了SWT浏览器的RCP应用程序。我们希望在浏览器和RCP应用程序之间实现某种通信。主要是我们希望如果用户按下Web界面中的一个按钮,事件就会被触发,这样RCP应用程序就可以监听它并相应地处理它(一个例子是在RCP应用程序中打开一个特定的视图)。
你将如何解决这个问题?我已经尝试在浏览器上添加MouseListener()。但是鼠标事件没有多大帮助,因为它们没有携带任何关于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;
}
}
我很清楚这里有其他可能的解决方案。这只是我幼稚的方法
您可以通过javascript修改您的网页以调用java函数。
您可以通过创建BrowserFunction
来创建可以从浏览器调用的java函数:
BrowserFunction. function
方法将被执行简单的例子:
带有按钮的网页,按下时调用java函数(page. html):
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="javaFunction()">Click Me!</button>
</body>
</html>
显示如何从SWT浏览器显示网页的java代码。当按下按钮时,函数
被调用并在控制台上打印:
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;
}
}
}