0

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部分をロードすることはできません。私の問題は、JavaScriptをロードするためにコードに何を追加する必要があるかです。ありがとうございました!

4

1 に答える 1

2

Swingのデフォルトウィジェットは、HTML4とCSSの非常に基本的なサポートのみを備えており、JavaScriptはまったくサポートされていません(デフォルト)。組み込みのRhinoJavaScriptエンジンを使用してコードを実行できる可能性がありますが、それは手動で行う必要があり、かなり困難です。HtmlUnitはこの戦術を使用してHTMLページを解析してJavaScriptを実行しますが、一般的に互換性が低く、レンダラーが完全にないため、自分で作成する必要があります(つまり、表示なし、コードからのみページコンテンツにアクセスできます) 。

Gecko(Firefox)またはWebKit(Chrome / Safari)レンダラーを組み込んだSwingベースのブラウザーウィジェットがいくつかあり、適切なJavaScriptインタープリターを利用できますが、それらはすべてバグが多く、高価であるか、保守されていません。これらはすべてJavaScriptをサポートしますが、通常、さまざまなブラウザエンジンの非常に古いバージョンを使用し、クロスプラットフォームの互換性がないことに加えて、最新のWebサイトとの互換性が低くなっています。

EclipseのSWTプロジェクトには、アクティブに保守されているように見えるブラウザウィジェットが含まれていますが、SWTライブラリに依存しているため、Swingアプリケーションで使用するのは多少難しいかもしれません。SWTはAWT/Swing(現在使用している)とはまったく異なるUIツールキットであり、そのブラウザーウィジェットを利用するには、Swingアプリに埋め込む方法を見つけるか、Swingアプリのみを使用する必要があります。 SWTツールキット。

全体として、SWTのブラウザーは、Javaで適切なブラウザーを取得するための最善の策ですが、それでも使用するのは面倒な場合があります。幸運を!

于 2012-05-27T06:33:36.353 に答える