0

我想用java编写一个简单的网络浏览器,这是我的代码!

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?谢谢!

4

1 回答 1

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 浏览器的最佳选择,但使用起来可能仍然很麻烦。祝你好运!

于 2012-05-27T06:33:36.353 回答