我想在java中编写一个简单的Web浏览器,这是我的代码!
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
public class WebBrowser extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
public JPanel
address_panel, window_panel;
public JLabel
address_label;
public JTextField
address_tf;
public JEditorPane
window_pane;
public JScrollPane
window_scroll;
public JButton
address_b;
private Go go = new Go();
public WebBrowser() throws IOException {
// Define address bar
address_label = new JLabel(" address: ", SwingConstants.CENTER);
address_tf = new JTextField("http://www.yahoo.com");
address_tf.addActionListener(go);
address_b = new JButton("Go");
address_b.addActionListener(go);
window_pane = new JEditorPane("http://www.yahoo.com");
window_pane.setContentType("text/html");
window_pane.setEditable(false);
address_panel = new JPanel(new BorderLayout());
window_panel = new JPanel(new BorderLayout());
address_panel.add(address_label, BorderLayout.WEST);
address_panel.add(address_tf, BorderLayout.CENTER);
address_panel.add(address_b, BorderLayout.EAST);
window_scroll = new JScrollPane(window_pane);
window_panel.add(window_scroll);
Container pane = getContentPane();
pane.setLayout(new BorderLayout());
pane.add(address_panel, BorderLayout.NORTH);
pane.add(window_panel, BorderLayout.CENTER);
setTitle("web browser");
setSize(800,600);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public class Go implements ActionListener{
public void actionPerformed(ActionEvent ae){
try {
window_pane.setPage(address_tf.getText());
} catch (MalformedURLException e) { // new URL() failed
window_pane.setText("MalformedURLException: " + e);
} catch (IOException e) { // openConnection() failed
window_pane.setText("IOException: " + e);
}
}
}
public static void main(String args[]) throws IOException {
WebBrowser wb = new WebBrowser();
}
}
它适用于简单的html页面,但它无法加载JavaScript部分代码!我的问题是我应该添加什么来加载javascripts的代码?谢谢!
答案 0 :(得分:2)
Swing的默认小部件只对HTML4和CSS提供非常基本的支持,完全不支持JavaScript(默认情况下)。您可以使用内置的Rhino JavaScript引擎来执行代码,但这必须手动完成并且非常困难。 HtmlUnit使用这种策略来解析HTML页面并执行JavaScript,但它通常兼容性差并且完全没有渲染器,所以你必须自己编写(即没有显示,你只能访问页面来自代码的内容。)
有一些基于Swing的浏览器小部件,它们嵌入了Gecko(Firefox)或WebKit(Chrome / Safari)渲染器,因此可以利用适当的JavaScript解释器,但它们都是错误的,昂贵的,或者没有维护。这些都支持JavaScript,但它们通常使用各种浏览器引擎的旧版本,并且与现代网站的兼容性差,而且缺乏跨平台兼容性。
Eclipse的SWT项目包含一个浏览器小部件,它似乎是主动维护的,但是依赖于SWT库,并且在Swing应用程序中使用起来会有些困难,尽管它可能是有可能的。 SWT是一个与AWT / Swing(您目前正在使用)完全不同的UI工具包,为了利用其浏览器小部件,您必须找到一种方法将其嵌入Swing应用程序中,或仅使用SWT工具包。
总体而言,SWT的浏览器可能是您在Java中获得一个不错的浏览器的最佳选择,但使用它可能仍然很麻烦。祝你好运!