SWT浏览器小部件:如何监听JavaScript事件?
因此,我们目前正在开发一个RCP应用程序,它集成了SWT浏览器。我们希望在浏览器和RCP应用程序之间实现某种通信。我们主要希望,如果用户在Webinterface中按下一个按钮,就会触发一个事件,这样RCP应用程序就可以监听并相应地处理它(例如,在RCP应用程序中打开一个特定的视图) 你将如何解决这个问题?我已经尝试在浏览器上添加MouseListener()。但是mouseevents帮不了什么忙,因为它们没有任何关于Web界面中哪个元素被按下的信息 我希望你能帮助我解决问题/用可能的解决方案激励我 编辑: 以下是有关如何实例化浏览器的一些示例:SWT浏览器小部件:如何监听JavaScript事件?,javascript,java,html,swt,rcp,Javascript,Java,Html,Swt,Rcp,因此,我们目前正在开发一个RCP应用程序,它集成了SWT浏览器。我们希望在浏览器和RCP应用程序之间实现某种通信。我们主要希望,如果用户在Webinterface中按下一个按钮,就会触发一个事件,这样RCP应用程序就可以监听并相应地处理它(例如,在RCP应用程序中打开一个特定的视图) 你将如何解决这个问题?我已经尝试在浏览器上添加MouseListener()。但是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;
}
}
我很清楚,这里还有其他可能的解决办法。这只是我的天真方法您可以修改您的网页,通过javascript调用java函数 您可以创建一个java函数,该函数可以通过创建:
BrowserFunction.function
方法你能添加一些你尝试过的代码吗?看看这个,当然,我已经添加了一些额外的例子。如果还有什么不清楚的地方,请告诉我。SWT代码不知道浏览器中发生了什么。您可能需要编写Javascript代码来处理事件,并使用
BrowserFunction
API调用Java(参见示例)
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="javaFunction()">Click Me!</button>
</body>
</html>
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;
}
}
}