如何在 JXBrowser 中调用 javascript 函数
How to call a javascript function in JXBrowser
我需要将内部 url 上传到 Swing 组件,然后从加载的 html 调用 JavaScript 函数。
我目前正在测试 JXBrowser 包,看看它是否符合我的要求。
为了测试简单,我将调用放在 JButton 中,这样我就可以手动调用它。
不幸的是,虽然我可以生成一个简单的警报调用,但我无法使代码成功调用该函数。这是我的代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
public class JXBrowserTest {
public static void main(String[] args) {
final Browser browser = new Browser();
BrowserView view = new BrowserView(browser);
String text = "";
try {
text = readFile("C:\work\temp\report.txt");
} catch (IOException e1) {
e1.printStackTrace();
}
final String report = text;
JButton button = new JButton("Java Script");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JSValue value = browser.executeJavaScriptAndReturnValue("gotoReport(" +report+")");
//browser.executeJavaScript("window.alert(\"Nothing is True\")");//this does work!
}
});
JFrame frame = new JFrame("JxBrowser - Dialoge Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(view, BorderLayout.CENTER);
frame.add(button, BorderLayout.PAGE_END);
frame.setSize(500, 400);
frame.setVisible(true);
browser.loadURL("http://myInternalUrl.swe");
}
private static String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} finally {
reader.close();
}
}
}
我需要在 JS 中调用 gotoReport(report),其中 report 是一个 xml 文本文件。
我怀疑我的问题是没有使用 JXBrowser 方法正确调用此函数,但我尝试了所有我能想到的方法。
有人可以帮忙吗?
我认为存在语法错误。假设你的文件内容是"Text content",你这样调用你的JavaScript函数:
gotoReport(Text content);
当期望这样调用它时:
gotoReport('Text content');
我建议您使用以下方法:
JSFunction gotoReport = browser.executeJavaScriptAndReturnValue("gotoReport").asFunction();
gotoReport.invoke(null, report);
我需要将内部 url 上传到 Swing 组件,然后从加载的 html 调用 JavaScript 函数。 我目前正在测试 JXBrowser 包,看看它是否符合我的要求。 为了测试简单,我将调用放在 JButton 中,这样我就可以手动调用它。 不幸的是,虽然我可以生成一个简单的警报调用,但我无法使代码成功调用该函数。这是我的代码:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.JSValue;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
public class JXBrowserTest {
public static void main(String[] args) {
final Browser browser = new Browser();
BrowserView view = new BrowserView(browser);
String text = "";
try {
text = readFile("C:\work\temp\report.txt");
} catch (IOException e1) {
e1.printStackTrace();
}
final String report = text;
JButton button = new JButton("Java Script");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JSValue value = browser.executeJavaScriptAndReturnValue("gotoReport(" +report+")");
//browser.executeJavaScript("window.alert(\"Nothing is True\")");//this does work!
}
});
JFrame frame = new JFrame("JxBrowser - Dialoge Test");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(view, BorderLayout.CENTER);
frame.add(button, BorderLayout.PAGE_END);
frame.setSize(500, 400);
frame.setVisible(true);
browser.loadURL("http://myInternalUrl.swe");
}
private static String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
String ls = System.getProperty("line.separator");
try {
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
stringBuilder.append(ls);
}
return stringBuilder.toString();
} finally {
reader.close();
}
}
}
我需要在 JS 中调用 gotoReport(report),其中 report 是一个 xml 文本文件。 我怀疑我的问题是没有使用 JXBrowser 方法正确调用此函数,但我尝试了所有我能想到的方法。 有人可以帮忙吗?
我认为存在语法错误。假设你的文件内容是"Text content",你这样调用你的JavaScript函数:
gotoReport(Text content);
当期望这样调用它时:
gotoReport('Text content');
我建议您使用以下方法:
JSFunction gotoReport = browser.executeJavaScriptAndReturnValue("gotoReport").asFunction();
gotoReport.invoke(null, report);