JXBrowser加载HTML,无法访问Javascript

时间:2018-02-16 16:35:59

标签: javascript java html jxbrowser

我已经看到这个问题弹出一点,但我似乎无法解决这个问题。在加载使用此库的本地index.html文件后,我正在努力访问我的Javascript库。错误说'cytoscape未定义'。

我正在使用LoadListener并等待框架加载invokeAndWaitFinishLoadingMainFrame。

代码如下。

package src.java;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.swing.JFrame;

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.Callback;
import com.teamdev.jxbrowser.chromium.events.FinishLoadingEvent;
import com.teamdev.jxbrowser.chromium.events.LoadAdapter;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

public class VisualFrame {

public VisualFrame(final Browser browser, final BrowserView view, final JFrame frame){
    frame.setTitle("Visualisation");
    frame.setResizable(false);

    System.out.println(browser);

    browser.addScriptContextListener(new ScriptContextAdapter() {
        @Override
        public void onScriptContextCreated(ScriptContextEvent event) {
              browser.executeJavaScript(event.getJSContext().getFrameId(),"window");
        }
    });  

    browser.addLoadListener(new LoadAdapter() {
        @Override
        public void onFinishLoadingFrame(FinishLoadingEvent event) {
            if (event.isMainFrame()) {
                event.getBrowser().executeJavaScript("window");
            }
        }
    });

    InputStream urlStream = getClass().getResourceAsStream("../web/cytoscape/index.html");
    String html = null;
    try (BufferedReader urlReader = new BufferedReader(new InputStreamReader (urlStream))) {
        StringBuilder builder = new StringBuilder();
        String row;
        while ((row = urlReader.readLine()) != null) {
            builder.append(row);
        }
        html = builder.toString(); 
    }  catch (IOException e) {
        throw new RuntimeException(e);
    }

    final String loadHelloPath = html;

    Browser.invokeAndWaitFinishLoadingMainFrame(browser, new Callback<Browser>(){
        @Override
        public void invoke(Browser arg0) {
            browser.loadHTML(loadHelloPath);
            System.out.println("HELLO");
        }
    });

    System.out.println(browser.getHTML());


}
}

当我调用event.getBrowser()。executeJavaScript(“cytoscape.js”)时,参数需要是特定的吗?

此外,JxBrowser是否支持所有外部JS库?

提前致谢。

杰克

0 个答案:

没有答案