3
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserFunction;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.LoggerProvider;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

import javax.swing.*;
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JavaScriptJavaSample {
  public static void main(String[] args) {
    LoggerProvider.setLevel(Level.OFF);
    Browser browser = new Browser();
    BrowserView browserView = new BrowserView(browser);

    browser.registerFunction("MyFunction", new BrowserFunction() {
        public JSValue invoke(JSValue... args) {
            System.out.println("MyFunction is invoked!");
            return JSValue.create("Hello!");
        }
    });

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.add(browserView, BorderLayout.CENTER);
    frame.setSize(700, 500);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    browser.loadHTML("<html><body><a href='#' onclick='MyFunction();'>Call Java method</a></body></html>");
}
}

我已经添加了所有的jar文件,但是BrowserFunction不存在,为什么?

所有其他课程都运行良好,但不明白这个问题,我

感谢所有提前导入所有的罐子

4

2 回答 2

2

据我所知,BrowserFunction()新版本的 jxbrowser 中没有使用注册功能。此处描述的6.1版本中有一种新方法。将新方式放入您的代码中:

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.BrowserFunction;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.LoggerProvider;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

import javax.swing.*;
import java.awt.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class JavaScriptJavaSample {
    public static void main(String[] args) {
        LoggerProvider.setLevel(Level.OFF);
        Browser browser = new Browser();
        BrowserView browserView = new BrowserView(browser);

        browser.addLoadListener(new LoadAdapter() {
            @Override
            public void onFinishLoadingFrame(FinishLoadingEvent event) {
                if (event.isMainFrame()) {
                    Browser browser = event.getBrowser();
                    JSValue value = browser.executeJavaScriptAndReturnValue("window");
                    value.asObject().setProperty("java", new Events());
                }
            }
        });

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(browserView, BorderLayout.CENTER);
        frame.setSize(700, 500);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        browser.loadHTML("<html><body><a href='#' onclick='alert(java.MyFunction());return false;'>Call Java method</a></body></html>");
    }
}

创建另一个文件来保存Events类:

public class Events {

    public String MyFunction() {

        System.out.println("MyFunction is invoked!");

        return new String("Hello");

    }

}

* 添加到标签属性return false的末尾,防止浏览器点击链接。顺便说一句,我建议您使用主要文档代码,因为它们是最新的。onclickahref

于 2016-03-25T08:43:57.963 回答
0

为了使用BrowserFunction你应该有 licence.jar 并将它添加到你的 classpath 。
JxBrowser 有 30 天免费试用。您也可以购买许可证。

于 2016-08-08T01:30:36.587 回答