Para finalizar nosso projeto, vamos programar agora todas as funcionalidades para que nosso navegador possa operar corretamente, para isto é exigido que você preste muita atenção, os códigos estão todos comentados.
Botão Voltar, de um duplo clique no botão para acessar o método Click:
Código 01:
//Volta uma página anterior.
//Back last page.
geckoBrowser1.GoBack();
Botão Atualizar, de um duplo clique no botão para acessar o método Click:
Código 02:
//Atualiza a página.
//Refresh page.
geckoBrowser1.Refresh();
Botão Avançar, de um duplo clique no botão para acessar o método Click:
Código 03:
//Avança uma página.
//Foward one page
geckoBrowser1.GoForward();
Botão Home, este botão servirá para que quando o usuário clicar sobre ele, a página atual será definida como a página inicial, que é carregada quando o Browser é aberto.
Para isto é necessário declarar duas variáveis e atribuir como valor, o nome dos dois arquivos de texto.
Antes do método construtor (public frmBrowser()), insira os códigos abaixo.
Código 04:
//Definimos os nomes dos arquivos.
//Define neme from files.
string url = "url.txt";
string home = "home.txt";
E por fim no método Click do botão Home insira o código responsável por gravar a URL definida como HOME em nosso Arquivo.
Código 05:
/*
Inclua using System.IO;
Abre o arquivo para leitura, apagando o que esta escrito e escreve novamente, ao finalizar fecha a 'conexão' o arquivo.
*/
StreamWriter sw = new StreamWriter(home); //Open file to write, and clear file before.
sw.WriteLine(txtUrl.Text); //write in file
sw.Close(); //close file
Agora vamos criar um método responsável por salvar a URL, estas URL vão aparecer no ComboBox ou txtUrl, isto é um simples sistema de histórico, porém bem básico.
Abaixo todo o código comentado em português dentro de um summary, que está antes do método, isto ajuda muito, pois quando for chamar o método aparece uma descrição sobre o mesmo.
Código 06:
/// <summary>
/// O Summary adiciona um comentário para o Método.
/// O método abaixo verifica se a URL não existe no arquivo e se não é uma página em branco, se isto ocorrer
/// a URL é gravada no arquivo.
/// Primeiro é lido todo o arquivo em seguida comparado.
/// Por último se a variável achou for igual a falso, então entra no IF.
/// </summary>
public void saveUrl()
{
string pagina = txtUrl.Text; //Pegamos o valor do endereço | Get value of Adress.
bool achou = false; //The URL Dont exists in file, set Default.
StreamReader sr = new StreamReader(url); //Open file to Read
while (sr.EndOfStream == false) //While not find the end
{
string tempPage = sr.ReadLine();//Save value of line in Temp var.
if (tempPage == pagina & tempPage != "about:blank")//Verify if URL don't exits or is not blank page
{
achou = true; //If exists or is Blank page the value is true
}
}
sr.Close(); //Close file
if (!achou)//If URL don't exists, enter in IF
{
StreamWriter rw = new StreamWriter(url, true);//Open file to Write and not clear file
rw.WriteLine(txtUrl.Text); //Save URL in new line
rw.Close();//Close file
}
}
Agora de um duplo clique no evento KeyDown do componente txtUrl, vamos inserir os códigos de carregar a URL no Browser, Chamar o método de salvar URL.
Como vamos precisar carregar várias vezes a URL, vamos criar um método para isto, então é só chamar o mesmo, ele preenche o txtUrl com os endereços gravados no arquivo url.txt.
Código 07:
/// <summary>
/// Verificamos se a URL existe no arquivo, se existir exibe a mesma no txtUrl
/// </summary>
public void carregarUrl()
{
StreamReader sr = new StreamReader(url); //Open file to Read
while (sr.EndOfStream == false)//while file don't end.
{
string tempPage = sr.ReadLine();//Read the line and save in temp variable
if (tempPage != null || tempPage != "about:blank")//if variable not null and not blank...
{
txtUrl.Items.Add(tempPage);//Insert the line in txtUrl
}
}
sr.Close();//Close file
}
Agora precisamos de mais um método, um responsável por chamar os demais, alterar título e carregar a página, crie um método como mostrado no código a baixo.
Código 08:
/// <summary>
/// O método abaixo é responsável por abrir a página no Browser,
/// adicionar o link da página no título, chamar o método saveUrl e
/// chamar o método carregarUrl.
/// </summary>
private void openPage()
{
geckoBrowser1.Navigate(txtUrl.Text); //Navigate to URL
frmBluefox.ActiveForm.Text = txtUrl.Text + " - Gecko Browser"; //Set link to Title
saveUrl(); //call method saveUrl
carregarUrl(); //call method carregarUrl, fill txtUrl with values
}
Finalmente no evento KeyDown do txtUrl insira o código a baixo, o mesmo executa as operações quando é pressionado o botão Enter.
Código 09:
private void txtUrl_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)// Se pressionar a tecla enter, if press key Enter...
{
openPage(); //Chama o métod openPage, call method openPage()
}
}
No método Load do formulário, insira o código abaixo, logo que o Formulário é aberto preenchemos os endereços visitados no txtUrl e verificamos se tem alguma página definida como Home, se tiver carregamos a mesma.
Código 10:
/// <summary>
/// O método load é quando o formulário é carregado.
/// Aqui carregamos os links no txtUrl;
/// Verificamos se contém alguma página definida como Home, se sim, abrimos ela quando o browser é carregado.
/// </summary>
private void frmBluefox_Load(object sender, EventArgs e)
{
carregarUrl();//Call method carregarUrl().
StreamReader sr = new StreamReader(home); //Open file to read.
while (sr.EndOfStream == false)//while not end file...
{
string temp = sr.ReadLine();//Read line and save in temp variable.
if (temp != null) //if variable is not null and have one value..
{
geckoBrowser1.Navigate(temp); //Navigate to page
txtUrl.Text = temp; //set txtUrl text with value of temp variable
}
}
sr.Close(); //Close file
}
Conforme vamos navegando pela imensidão da internet, os Links vão mudando, então demos ir atualizando o Link atual do txtUrl, para isto clique no geckoBrowser1 e no evento documentCompleted, que nada mais é do que quando a página termina de ser carregada.
Código 11:
/// <summary>
/// Após a página ser carregada, pegamos o link atual e inserimos no txtUrl.
/// </summary>
private void geckoBrowser1_DocumentCompleted(object sender, EventArgs e)
{
txtUrl.Text = geckoBrowser1.Url.ToString(); // Get Current Link and send to txtUrl
}
Nosso navegador está quase pronto, só temos um pequeno problema, se selecionarmos algum item no txtUrl, precisamos pressionar Enter para navegar, isto não é legal nem mesmo usado pelo Browser, para resolver isto, quando for selecionado algum item, vamos carregar aquela URL.
No método txtUrl_SelectedIndexChanged(), precisamos chamar o método openPage().
Código 12:
private void txtUrl_SelectedIndexChanged(object sender, EventArgs e)
{
openPage();//Call method openPage().
}
E assim terminamos nosso projeto do Bluefox, espero que você tenha gostado.
Código 13:
using Skybound.Gecko;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Bluefox_Browser
{
public partial class frmBluefox : Form
{
//Definimos os nomes dos arquivos.
//Define neme from files.
string url = "url.txt";
string home = "home.txt";
public frmBluefox()
{
InitializeComponent();
Xpcom.Initialize(Environment.CurrentDirectory + "/xulrunner");
}
/// <summary>
/// O método load é quando o formulário é carregado.
/// Aqui carregamos os links no txtUrl;
/// Verificamos se contém alguma página definida como Home, se sim, abrimos ela quando o browser é carregado.
/// </summary>
private void frmBluefox_Load(object sender, EventArgs e)
{
carregarUrl();//Call method carregarUrl().
StreamReader sr = new StreamReader(home); //Open file to read.
while (sr.EndOfStream == false)//while not end file...
{
string temp = sr.ReadLine();//Read line and save in temp variable.
if (temp != null) //if variable is not null and have one value..
{
geckoBrowser1.Navigate(temp); //Navigate to page
txtUrl.Text = temp; //set txtUrl text with value of temp variable
}
}
sr.Close(); //Close file
}
private void btnBack_Click(object sender, EventArgs e)
{
//Volta uma página anterior.
//Back last page.
geckoBrowser1.GoBack();
}
private void btnRefresh_Click(object sender, EventArgs e)
{
//Atualiza a página.
//Refresh page.
geckoBrowser1.Refresh();
}
private void btnFoward_Click(object sender, EventArgs e)
{
//Avança uma página.
//Foward one page
geckoBrowser1.GoForward();
}
private void btnSetHome_Click(object sender, EventArgs e)
{
/*
* Inclua using System.IO;
Abre o arquivo para leitura, apagando o que esta escrito e escreve novamente, ao finalizar fecha a 'conexão' o arquivo.
*/
StreamWriter sw = new StreamWriter(home); //Open file to write, and clear file before.
sw.WriteLine(txtUrl.Text); //write in file
sw.Close(); //close file
}
/// <summary>
/// O Summary adiciona um comentário para o Método.
/// O método abaixo verifica se a URL não existe no arquivo e se não é uma página em branco, se isto ocorrer
/// a URL é gravada no arquivo.
/// Primeiro é lido todo o arquivo em seguida comparado.
/// Por último se a variável achou for igual a falso, então entra no IF.
/// </summary>
public void saveUrl()
{
string pagina = txtUrl.Text; //Pegamos o valor do endereço | Get value of Adress.
bool achou = false; //The URL Dont exists in file, set Default.
StreamReader sr = new StreamReader(url); //Open file to Read
while (sr.EndOfStream == false) //While not find the end
{
string tempPage = sr.ReadLine();//Save value of line in Temp var.
if (tempPage == pagina & tempPage != "about:blank")//Verify if URL don't exits or is not blank page
{
achou = true; //If exists or is Blank page the value is true
}
}
sr.Close(); //Close file
if (!achou)//If URL don't exists, enter in IF
{
StreamWriter rw = new StreamWriter(url, true);//Open file to Write and not clear file
rw.WriteLine(txtUrl.Text); //Save URL in new line
rw.Close();//Close file
}
}
private void geckoBrowser1_Click(object sender, EventArgs e)
{
}
private void txtUrl_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)// Se pressionar a tecla enter, if press key Enter...
{
openPage(); //Chama o métod openPage, call method openPage()
}
}
/// <summary>
/// Verificamos se a URL existe no arquivo, se existir exibe a mesma no txtUrl
/// </summary>
public void carregarUrl()
{
StreamReader sr = new StreamReader(url); //Open file to Read
while (sr.EndOfStream == false)//while file don't end.
{
string tempPage = sr.ReadLine();//Read the line and save in temp variable
if (tempPage != null || tempPage != "about:blank")//if variable not null and not blank...
{
txtUrl.Items.Add(tempPage);//Insert the line in txtUrl
}
}
sr.Close();//Close file
}
/// <summary>
/// O método abaixo é responsável por abrir a página no Browser,
/// adicionar o link da página no título, chamar o método saveUrl e
/// chamar o método carregarUrl.
/// </summary>
private void openPage()
{
geckoBrowser1.Navigate(txtUrl.Text); //Navigate to URL
frmBluefox.ActiveForm.Text = txtUrl.Text + " - Gecko Browser"; //Set link to Title
saveUrl(); //call method saveUrl
carregarUrl(); //call method carregarUrl, fill txtUrl with values
}
private void txtUrl_SelectedIndexChanged(object sender, EventArgs e)
{
openPage();
}
/// <summary>
/// Após a página ser carregada, pegamos o link atual e inserimos no txtUrl.
/// </summary>
private void geckoBrowser1_DocumentCompleted(object sender, EventArgs e)
{
txtUrl.Text = geckoBrowser1.Url.ToString(); // Get Current Link and send to txtUrl
}
}
}