浏览javascript

时间:2012-05-27 06:09:14

标签: java javascript swing browser jeditorpane

我想在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的代码?谢谢!

1 个答案:

答案 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中获得一个不错的浏览器的最佳选择,但使用它可能仍然很麻烦。祝你好运!