Navigateur internet - mise à jour

Description

Ce navigateur fait une requête au serveur et affiche le contenu HTML des pages dans un JEditorPane. Étant donné qu'aucun script ne peut s'éxécuter à partir de là, il est donc sans risques d'aller n'importe où sur les sites, sans craindre que des opérations indésirables s'effectuent. C'est une sorte se sécurité absolue pour le Web ;-)

Source / Exemple :


import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import javax.swing.event.*;

public class SecureWebExplorer extends JFrame implements ActionListener, HyperlinkListener {
    private String currURL = null;
    private String history[] = new String[15];
    private int h = 0;
    private JMenuItem MI_NEWPAGE, MI_ACTU, MI_CODE, MI_ABOUT;
    private JButton bPREV, bNEXT, bOK;
    private JPopupMenu PM_NAV;
    private JMenuItem PMI_ACTU, PMI_CODE;
    private JTextField urlBar;
    private JEditorPane contenu;
    private JLabel barreEtat;
    
    private final String WMSG = " Bienvenue sur Secure Web Explorer !",
        P_LOAD = " Chargement de la page...",
        S_LOAD = " Chargement de la source...",
        END = " Terminé",
        ERR_NOENTRY = "Veuillez entrer une adresse dans la barre",
        ERR_URL = " URL invalide",
        ERR_FILE = " Fichier introuvable",
        ERR_DISP = " Il y a eu un problème lors de l'affichage de la page";
    
    public SecureWebExplorer() {
        initFrame(150, 150);
        lirePage("http://www.google.com");
        addPage();
    }
    
    public SecureWebExplorer(int x, int y) {
        initFrame(x, y);
        lirePage("http://www.google.com");
        addPage();
    }
    
    public SecureWebExplorer(int x, int y, String urlName) {
        initFrame(x, y);
        lirePage(urlName);
        addPage();
    }
    
    public void initFrame(int x, int y) {
        super.setTitle("Document vide - Secure Web Explorer");
        JMenuBar barre = new JMenuBar();
        
        // Menu 1: "Fichier"
        JMenu M_FILE = new JMenu("Fichier");
        MI_NEWPAGE = new JMenuItem("Ouvrir une nouvelle page");
        MI_NEWPAGE.addActionListener(this);
        MI_NEWPAGE.setMnemonic('O');
        M_FILE.add(MI_NEWPAGE);
        M_FILE.setMnemonic('F');
        barre.add(M_FILE);
        
        // Menu 2: "Affichage"
        JMenu M_DISP = new JMenu("Affichage");
        MI_ACTU = new JMenuItem("Actualiser");
        MI_ACTU.addActionListener(this);
        MI_ACTU.setMnemonic('t');
        M_DISP.add(MI_ACTU);
        M_DISP.addSeparator();
        MI_CODE = new JMenuItem("Source");
        MI_CODE.addActionListener(this);
        MI_CODE.setMnemonic('S');
        M_DISP.add(MI_CODE);
        M_DISP.setMnemonic('A');
        barre.add(M_DISP);

        // Menu 3: "Info"
        JMenu M_INFO = new JMenu("Info");
        MI_ABOUT = new JMenuItem("A propos...");
        MI_ABOUT.addActionListener(this);
        MI_ABOUT.setMnemonic('p');
        M_INFO.add(MI_ABOUT);
        M_INFO.setMnemonic('I');
        barre.add(M_INFO);
        
        setJMenuBar(barre);
        
        // Menu de navigation
        PM_NAV = new JPopupMenu();
        PMI_ACTU = new JMenuItem("Actualiser");
        PMI_ACTU.addActionListener(this);
        PMI_ACTU.setMnemonic('t');
        PM_NAV.add(PMI_ACTU);
        PM_NAV.addSeparator();
        PMI_CODE = new JMenuItem("Source");
        PMI_CODE.addActionListener(this);
        PMI_CODE.setMnemonic('S');
        PM_NAV.add(PMI_CODE);
        
        Container c = getContentPane();
        
        // Barre d'outils
        JToolBar toolBar = new JToolBar();
        
            // Page précédente
        bPREV = new JButton("Prec.");
        bPREV.addActionListener(this);
        bPREV.setEnabled(false);
        toolBar.add(bPREV);
        
            // Page suivante
        bNEXT = new JButton("Suiv.");
        bNEXT.addActionListener(this);
        bNEXT.setEnabled(false);
        toolBar.add(bNEXT);
        
            // Barre d'adresse
        urlBar = new JTextField();
        urlBar.addActionListener(this);
        toolBar.add(urlBar);
        
            // Bouton «OK»
        bOK = new JButton("OK");
        bOK.addActionListener(this);
        toolBar.add(bOK);
        
        c.add(toolBar, BorderLayout.NORTH);
        
        // Contenu de la page
        contenu = new JEditorPane();
        contenu.setEditable(false);
        contenu.addHyperlinkListener(this);
        contenu.addMouseListener(
            new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    checkTrigger(e);
                }
                
                public void mouseReleased(MouseEvent e) {
                    checkTrigger(e);
                }
                
                private void checkTrigger(MouseEvent e) {
                    if (e.isPopupTrigger())
                        PM_NAV.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        );
        JScrollPane scrollPane = new JScrollPane(contenu);
        c.add(scrollPane, BorderLayout.CENTER);
        
        // Barre d'état
        barreEtat = new JLabel(WMSG);
        c.add(barreEtat, BorderLayout.SOUTH);
        
        setSize(600, 500);
        setLocation(x, y);
        show();
    }
    
    public void hyperlinkUpdate(HyperlinkEvent e) {
        if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
            lirePage(e.getURL().toString());
            addPage();
        }
    }
    
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == MI_NEWPAGE) {
            if (currURL != null)
                new SecureWebExplorer(170, 170, currURL);
            else
                new SecureWebExplorer(170, 170);
        }
        
        if (e.getSource() == bPREV)
            go_prev();
        
        if (e.getSource() == bNEXT)
            go_next();
        
        if (e.getSource() == urlBar || e.getActionCommand() == "OK") {
            if (!urlBar.getText().equals("")) {
                lirePage(urlBar.getText());
                addPage();
            }
            else
                barreEtat.setText(ERR_NOENTRY);
        }
        
        if (e.getActionCommand() == "Actualiser") {
            if (currURL != null)
                lirePage(currURL);
        }
            
        if (e.getActionCommand() == "Source") {
            if (currURL != null)
                new TextEditor(currURL);
        }

        if (e.getSource() == MI_ABOUT)
            JOptionPane.showMessageDialog(null, getInfo(),
                    "À propos...", JOptionPane.INFORMATION_MESSAGE);
    }

    public String getInfo() {
        return "Secure Web Explorer, par FasteX";
    }

    private void addPage() {
        if (currURL != null) {
            h++;
            if (h > 10) {
                for (int i = 0; i < 9; i++)
                    history[i] = history[i + 1];
                h--;
            }
            history[h] = currURL;
            actuPREV();
            actuNEXT();
        }
    }
    
    private void actuPREV() {
        if (h - 1 < 0 || history[h - 1] == null) {
            bPREV.setEnabled(false);
            bPREV.setToolTipText("Il n'y a pas de page précédente");
        }
        else {
            bPREV.setEnabled(true);
            bPREV.setToolTipText(history[h - 1]);
        }
    }
    
    private void actuNEXT() {
        if (history[h + 1] == null) {
            bNEXT.setEnabled(false);
            bNEXT.setToolTipText("Il n'y a pas de page suivante");
        }
        else {
            bNEXT.setEnabled(true);
            bNEXT.setToolTipText(history[h + 1]);
        }
    }
    
    private void go_prev() {
        if (bPREV.isEnabled()) {
            h--;
            lirePage(history[h]);
        }
    }
    
    private void go_next() {
        if (bNEXT.isEnabled()) {
            h++;
            lirePage(history[h]);
        }
    }
    
    private void lirePage(String urlName) {
        if (urlName.indexOf("http://") == -1)
            urlName = "http://" + urlName;
        urlBar.setText(urlName);
        currURL = urlName;
        super.setTitle(" " + urlName + " - Secure Web Explorer");
        actuPREV();
        actuNEXT();

        barreEtat.setText(P_LOAD);

        try {
            contenu.setPage(urlName);
            barreEtat.setText(END); }
        catch(MalformedURLException e) {
            barreEtat.setText(ERR_URL); }
        catch(FileNotFoundException e) {
            barreEtat.setText(ERR_FILE); }
        catch(IOException e) {
            barreEtat.setText(ERR_DISP); }
        catch(Exception e) {
            barreEtat.setText(ERR_DISP);
        }
    }
    
    public static void main(String[] s) {
        SecureWebExplorer app = new SecureWebExplorer();
        app.setDefaultCloseOperation(2);
    }
}

__________________________________________________________________________

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.io.*;

public class TextEditor extends JFrame implements ActionListener {
   private JTextArea tA;
   private JMenu M_FILE, M_EDIT;
   private JMenuItem MI_OPEN, MI_SAVE, MI_SAVEAS, MI_CLOSE, MI_EXIT;
   private JMenuItem MI_CUT, MI_COPY, MI_PASTE;
   private JPopupMenu pop;
   private JMenuItem PMI_CUT, PMI_COPY, PMI_PASTE;

   public TextEditor() {
      super.setTitle("Document vide - TextEditor");
      initFrame();
   }

   public TextEditor(String urlName) {
      super.setTitle("Source de " + urlName + " - TextEditor");
      initFrame();
      displayHtmlSource(urlName);
   }

   public void initFrame() {
      Container c = getContentPane();

      JMenuBar menuBar = new JMenuBar();

      M_FILE = new JMenu("Fichier");
      MI_OPEN = new JMenuItem("Ouvrir...");
      MI_OPEN.setMnemonic('O');
      M_FILE.add(MI_OPEN);
      MI_SAVE = new JMenuItem("Enregistrer");
      MI_SAVE.setMnemonic('E');
      M_FILE.add(MI_SAVE);
      MI_SAVEAS = new JMenuItem("Enregistrer sous...");
      MI_SAVEAS.setMnemonic('s');
      M_FILE.add(MI_SAVEAS);
      MI_CLOSE = new JMenuItem("Fermer");
      MI_CLOSE.setMnemonic('F');
      M_FILE.add(MI_CLOSE);
      M_FILE.addSeparator();
      MI_EXIT = new JMenuItem("Quitter");
      MI_EXIT.addActionListener(this);
      MI_EXIT.setMnemonic('Q');
      M_FILE.add(MI_EXIT);
      M_FILE.setMnemonic('F');
      menuBar.add(M_FILE);

      M_EDIT = new JMenu("Edition");
      MI_CUT = new JMenuItem("Couper");
      MI_CUT.addActionListener(this);
      MI_CUT.setMnemonic('C');
      M_EDIT.add(MI_CUT);
      MI_COPY = new JMenuItem("Copier");
      MI_COPY.addActionListener(this);
      MI_COPY.setMnemonic('p');
      M_EDIT.add(MI_COPY);
      MI_PASTE = new JMenuItem("Coller");
      MI_PASTE.addActionListener(this);
      MI_PASTE.setMnemonic('o');
      M_EDIT.add(MI_PASTE);
      M_EDIT.setMnemonic('E');
      menuBar.add(M_EDIT);

      setJMenuBar(menuBar);
      
      pop = new JPopupMenu();
      PMI_CUT = new JMenuItem("Couper");
      PMI_CUT.addActionListener(this);
      PMI_CUT.setMnemonic('C');
      pop.add(PMI_CUT);
      PMI_COPY = new JMenuItem("Copier");
      PMI_COPY.addActionListener(this);
      PMI_COPY.setMnemonic('P');
      pop.add(PMI_COPY);
      PMI_PASTE = new JMenuItem("Coller");
      PMI_PASTE.addActionListener(this);
      PMI_PASTE.setMnemonic('O');
      pop.add(PMI_PASTE);

      tA = new JTextArea();
      tA.addMouseListener(
         new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
               checkPopupTrigger(e);
            }

            public void mouseReleased(MouseEvent e) {
               checkPopupTrigger(e);
            }

            private void checkPopupTrigger(MouseEvent e) {
               if ( e.isPopupTrigger() )
                  showContext(e);
            }
         }
      );

      JScrollPane scrollPane = new JScrollPane(tA);
      c.add(scrollPane, BorderLayout.CENTER);

      setSize(600, 500);
      setLocation(200, 75);
      show();
   }

   public void actionPerformed(ActionEvent e) {
      if ( "Quitter" == e.getActionCommand() )
         System.exit(0);
      if ( "Couper" == e.getActionCommand() )
         tA.cut();
      if ( "Copier" == e.getActionCommand() )
         tA.copy();
      if ( "Coller" == e.getActionCommand() )
         tA.paste();
   }

   public void showContext(MouseEvent e) {
      updatePopupContext();
      pop.show(e.getComponent(), e.getX(), e.getY());
   }

   public void updatePopupContext() {
      if (tA.getSelectedText() == null) {
         PMI_CUT.setEnabled(false);
         PMI_COPY.setEnabled(false);
      }
      else {
         PMI_CUT.setEnabled(true);
         PMI_COPY.setEnabled(true);
      }
   }

   public void displayHtmlSource(String urlName) {
      String s;
      StringBuffer buf = new StringBuffer();
      try {
         URL url = new URL(urlName);
         HttpURLConnection connection = (HttpURLConnection) url.openConnection();
         BufferedReader in = new BufferedReader(
            new InputStreamReader( connection.getInputStream() ) );
         while ((s = in.readLine()) != null)
            buf.append(s + "\n");
         tA.setText( buf.toString() );
      }
      catch(MalformedURLException e) {}
      catch(FileNotFoundException e) {}
      catch(IOException e) {}
   }

   public void err(String errorMsg) {
      JOptionPane.showMessageDialog(null, errorMsg,
            "Erreur", JOptionPane.ERROR_MESSAGE);
   }

   public static void main(String[] args) {
      TextEditor app = new TextEditor();
      app.setDefaultCloseOperation(EXIT_ON_CLOSE);
   }
}

Conclusion :


N'hésitez pas à laisser des commentaires ;-)

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Un problème que je me doit de résoudre, c'est qu'il ne gère pas les boutons dans les ///
pages qu'il affiche (il ne réagis pas au clique). Et évidement, vu qu'il n'y a aucun ///
script qui s'éxécute, certains sites s'affichent très mal. ///
////////////////////////////////////////////////////////////////////////////////////////////////////////////////

FasteX_

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.