hola
estoy aprendiendo c
y me gustaria hacer un navegador web pero ya mas avanzado no esos que se hacen con visual basic y depende de librerias o componentes del explorer
en general
puedo hacer el componente que traduce el lenguaje html a pagina legible en lenguaje c
perdon por ser muy general y falta de terminos pero apenas comienzo :-\ gracias ::)
Creo que lynx está escrito en C y es un navegador sobre la consola de comandos.
Cita de: Leo Gutiérrez. en 3 Julio 2010, 22:07 PM
Creo que lynx está escrito en C y es un navegador sobre la consola de comandos.
pero me referia a algo mas grafico y mas que nada al componente que menciono nose si alquien sepa algo de esto gracias x la respuesta
Podrías utilizar winApi supongo.
O con Qt.
en base necesitas parsear tanto html como css y luego dibujar los objetos que vienen definidos en el codigo, sin olvidarse de las respuestas del servidor etc etc.
Cita de: ctlon en 4 Julio 2010, 00:56 AM
en base necesitas parsear tanto html como css y luego dibujar los objetos que vienen definidos en el codigo, sin olvidarse de las respuestas del servidor etc etc.
pero como puedo guiarme para hacerlo ?¿
es con puras lineas de codigo o algo mas ?¿
noce si me puedas dar una guia gracias por las respuestas
logicamente con codigo, empieza por el parser de html/css y cuando reconozca perfectamente el codigo ya te metes en lo visual.
Qt ya tiene una sección entera para interpretar etiquetas html, de hecho si lo instalas uno de los ejemplos es un navegador de internet.
si, pero es nativo o usa el internet explorer?
Cita de: ctlon en 4 Julio 2010, 22:35 PM
si, pero es nativo o usa el internet explorer?
la misma duda amigo
og ?¿
gracias x las respuestas.
Estoy casi un 90% seguro de que es nativo.. :silbar:
99 :P
No, no usa IE como base.
A por cierto, los ejemplos no vienen con las librerias, mas bien bienen con el IDE oficial.
Yo no estaría tan seguro, mucho menos un 99%, probablemente use ActiveX. Me gustaría ver el código. Alguien puede colgar el ejemplo? no tengo Qt instalado en este ordenador.
Saludos
Cita de: Littlehorse en 5 Julio 2010, 07:07 AM
Yo no estaría tan seguro, mucho menos un 99%, probablemente use ActiveX. Me gustaría ver el código. Alguien puede colgar el ejemplo? no tengo Qt instalado en este ordenador.
Saludos
main.cpp
#include <QtGui>
#include "mainwindow.h"
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
MainWindow browser;
browser.show();
return app.exec();
}
mainwindow.h
#include <QtGui>
class QWebView;
QT_BEGIN_NAMESPACE
class QLineEdit;
QT_END_NAMESPACE
//! [1]
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
protected slots:
void adjustLocation();
void changeLocation();
void adjustTitle();
void setProgress(int p);
void finishLoading(bool);
void highlightAllLinks();
void rotateImages(bool invert);
void removeGifImages();
void removeInlineFrames();
void removeObjectElements();
void removeEmbeddedElements();
private:
QString jQuery;
QWebView *view;
QLineEdit *locationEdit;
QAction *rotateAction;
int progress;
//! [1]
};
mainwindow.cpp
#include <QtGui>
#include <QtWebKit>
#include "mainwindow.h"
//! [1]
MainWindow::MainWindow()
{
progress = 0;
QFile file;
file.setFileName(":/jquery.min.js");
file.open(QIODevice::ReadOnly);
jQuery = file.readAll();
file.close();
//! [1]
QNetworkProxyFactory::setUseSystemConfiguration(true);
//! [2]
view = new QWebView(this);
view->load(QUrl("http://www.google.com/ncr"));
connect(view, SIGNAL(loadFinished(bool)), SLOT(adjustLocation()));
connect(view, SIGNAL(titleChanged(QString)), SLOT(adjustTitle()));
connect(view, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
connect(view, SIGNAL(loadFinished(bool)), SLOT(finishLoading(bool)));
locationEdit = new QLineEdit(this);
locationEdit->setSizePolicy(QSizePolicy::Expanding, locationEdit->sizePolicy().verticalPolicy());
connect(locationEdit, SIGNAL(returnPressed()), SLOT(changeLocation()));
QToolBar *toolBar = addToolBar(tr("Navigation"));
toolBar->addAction(view->pageAction(QWebPage::Back));
toolBar->addAction(view->pageAction(QWebPage::Forward));
toolBar->addAction(view->pageAction(QWebPage::Reload));
toolBar->addAction(view->pageAction(QWebPage::Stop));
toolBar->addWidget(locationEdit);
//! [2]
//! [3]
QMenu *effectMenu = menuBar()->addMenu(tr("&Effect"));
effectMenu->addAction("Highlight all links", this, SLOT(highlightAllLinks()));
rotateAction = new QAction(this);
rotateAction->setIcon(style()->standardIcon(QStyle::SP_FileDialogDetailedView));
rotateAction->setCheckable(true);
rotateAction->setText(tr("Turn images upside down"));
connect(rotateAction, SIGNAL(toggled(bool)), this, SLOT(rotateImages(bool)));
effectMenu->addAction(rotateAction);
QMenu *toolsMenu = menuBar()->addMenu(tr("&Tools"));
toolsMenu->addAction(tr("Remove GIF images"), this, SLOT(removeGifImages()));
toolsMenu->addAction(tr("Remove all inline frames"), this, SLOT(removeInlineFrames()));
toolsMenu->addAction(tr("Remove all object elements"), this, SLOT(removeObjectElements()));
toolsMenu->addAction(tr("Remove all embedded elements"), this, SLOT(removeEmbeddedElements()));
setCentralWidget(view);
setUnifiedTitleAndToolBarOnMac(true);
}
//! [3]
//! [4]
void MainWindow::adjustLocation()
{
locationEdit->setText(view->url().toString());
}
void MainWindow::changeLocation()
{
QUrl url = QUrl(locationEdit->text());
view->load(url);
view->setFocus();
}
//! [4]
//! [5]
void MainWindow::adjustTitle()
{
if (progress <= 0 || progress >= 100)
setWindowTitle(view->title());
else
setWindowTitle(QString("%1 (%2%)").arg(view->title()).arg(progress));
}
void MainWindow::setProgress(int p)
{
progress = p;
adjustTitle();
}
//! [5]
//! [6]
void MainWindow::finishLoading(bool)
{
progress = 100;
adjustTitle();
view->page()->mainFrame()->evaluateJavaScript(jQuery);
rotateImages(rotateAction->isChecked());
}
//! [6]
//! [7]
void MainWindow::highlightAllLinks()
{
QString code = "$('a').each( function () { $(this).css('background-color', 'yellow') } )";
view->page()->mainFrame()->evaluateJavaScript(code);
}
//! [7]
//! [8]
void MainWindow::rotateImages(bool invert)
{
QString code;
if (invert)
code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(180deg)') } )";
else
code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(0deg)') } )";
view->page()->mainFrame()->evaluateJavaScript(code);
}
//! [8]
//! [9]
void MainWindow::removeGifImages()
{
QString code = "$('[src*=gif]').remove()";
view->page()->mainFrame()->evaluateJavaScript(code);
}
void MainWindow::removeInlineFrames()
{
QString code = "$('iframe').remove()";
view->page()->mainFrame()->evaluateJavaScript(code);
}
void MainWindow::removeObjectElements()
{
QString code = "$('object').remove()";
view->page()->mainFrame()->evaluateJavaScript(code);
}
void MainWindow::removeEmbeddedElements()
{
QString code = "$('embed').remove()";
view->page()->mainFrame()->evaluateJavaScript(code);
}
//! [9]
symbianpkgrules.pri
!symbian: error(Only include this file for Symbian platforms)
RSS_RULES ="group_name=\"QtExamples\";"
vendorinfo = \
"; Localised Vendor name" \
"%{\"Nokia, Qt\"}" \
" " \
"; Unique Vendor name" \
":\"Nokia, Qt\"" \
" "
default_deployment.pkg_prerules += vendorinfo
isEmpty(ICON):ICON = $$QT_SOURCE_TREE/src/s60installs/qt.svg
y como resource incluyes jquery.min.js
Aparte corre bajo *nix :P
Saludos!
Bien, no usa ActiveX. No obstante, lo relevante radica en el port de WebKit, y precisamente lo que se encuentra allí abstraído es lo que Linux1 quiere saber como hacer.
Igualmente el dato le servirá ya que dicho port es open source, así que en todo caso podrá ponerse a leer el código a ver que encuentra, pero realmente no creo que sea una tarea sencilla para quien esta comenzando con el lenguaje.
Saludos!
Cita de: Littlehorse en 5 Julio 2010, 07:48 AM
Bien, no usa ActiveX. No obstante, lo relevante radica en el port de WebKit, y precisamente lo que se encuentra allí abstraído es lo que Linux1 quiere saber como hacer.
Igualmente el dato le servirá ya que dicho port es open source, así que en todo caso podrá ponerse a leer el código a ver que encuentra, pero realmente no creo que sea una tarea sencilla para quien esta comenzando con el lenguaje.
Saludos!
gracias a todos ya me di cuenta que es algo complejo para alquien que comienza yo solo queria una guia o introduccion y ya me la dieron gracias.