2012-05-27 40 views
0

我想用java寫一個簡單的網頁瀏覽器,這是我的代碼!瀏覽javascript

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

+6

您需要將某種Javascript引擎放入您的瀏覽器。你可以編寫你自己的,或者環顧四周,看看是否有人把它移植到Java。 – Makoto

+2

*「我想寫一個簡單的網絡瀏覽器」*我想爲我的寵物農場釣到Dodos。鑑於沒有Dodos,也沒有「簡單的網絡瀏覽器」,我們都將我們的工作剪掉了。 ;) –

+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中獲得體面的瀏覽器的最佳選擇,但它可能仍然很麻煩。祝你好運!

+0

*「Swing的默認小部件只對HTML4有非常基本的支持。」* HTML 3.2。 –

+0

哎喲,甚至更好。這是一個恥辱所有的努力,包括一個體面的瀏覽器小部件只有它成爲JavaFX,我會喜歡看到在標準的庫... ... – timothyb89