gpt4 book ai didi

javascript - SWT 浏览器小部件 : How to listen to JavaScript events?

转载 作者:行者123 更新时间:2023-11-30 14:16:08 25 4
gpt4 key购买 nike

所以我们目前正在开发一个 RCP 应用程序,它集成了一个 SWT 浏览器。我们想在浏览器和 RCP 应用程序之间实现某种通信。主要是我们希望,如果用户在 Web 界面中按下一个按钮,就会触发一个事件,以便 RCP 应用程序可以监听它并相应地处理它(例如打开 RCP 应用程序中的特定 View )。

您将如何解决这个问题?我已经尝试在浏览器上添加 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 函数:

  1. 在构造函数中传递 javascript 必须调用的函数名
  2. 发生这种情况时,将执行 BrowserFunction.function 方法

简单的例子:

带有按钮的网页在按下时调用 java 函数 (page.html):

<!DOCTYPE html>
<html>
<body>

<button type="button" onclick="javaFunction()">Click Me!</button>

</body>
</html>

显示如何从 SWT 浏览器显示网页的 java 代码。当按下按钮时,调用 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;
}
}

}

关于javascript - SWT 浏览器小部件 : How to listen to JavaScript events?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com