Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: linux1 en 3 Julio 2010, 21:27 pm



Título: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: linux1 en 3 Julio 2010, 21:27 pm
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  ::)


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: leogtz en 3 Julio 2010, 22:07 pm
Creo que lynx está escrito en C y es un navegador sobre la consola de comandos.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: linux1 en 4 Julio 2010, 00:47 am
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


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: cbug en 4 Julio 2010, 00:49 am
Podrías utilizar winApi supongo.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: leogtz en 4 Julio 2010, 00:54 am
O con Qt.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: bizco 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.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: linux1 en 4 Julio 2010, 20:48 pm
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


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: bizco en 4 Julio 2010, 22:13 pm
logicamente con codigo, empieza por el parser de html/css y cuando reconozca perfectamente el codigo ya te metes en lo visual.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: Og. en 4 Julio 2010, 22:22 pm
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.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: bizco en 4 Julio 2010, 22:35 pm
si, pero es nativo o usa el internet explorer?


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: linux1 en 5 Julio 2010, 05:39 am
si, pero es nativo o usa el internet explorer?
la misma duda amigo og ?¿

gracias x las respuestas.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: Zazú en 5 Julio 2010, 06:24 am
Estoy casi un 90% seguro de que es nativo..   :silbar:
 99 :P


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: Og. en 5 Julio 2010, 06:36 am
No, no usa IE como base.
A por cierto, los ejemplos no vienen con las librerias, mas bien bienen con el IDE oficial.


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: 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


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: Og. en 5 Julio 2010, 07:26 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
Código
  1. #include <QtGui>
  2. #include "mainwindow.h"
  3.  
  4. int main(int argc, char * argv[])
  5. {
  6.    QApplication app(argc, argv);
  7.    MainWindow browser;
  8.    browser.show();
  9.    return app.exec();
  10. }

mainwindow.h
Código
  1. #include <QtGui>
  2.  
  3. class QWebView;
  4. QT_BEGIN_NAMESPACE
  5. class QLineEdit;
  6. QT_END_NAMESPACE
  7.  
  8. //! [1]
  9. class MainWindow : public QMainWindow
  10. {
  11.    Q_OBJECT
  12.  
  13. public:
  14.    MainWindow();
  15.  
  16. protected slots:
  17.  
  18.    void adjustLocation();
  19.    void changeLocation();
  20.    void adjustTitle();
  21.    void setProgress(int p);
  22.    void finishLoading(bool);
  23.  
  24.    void highlightAllLinks();
  25.    void rotateImages(bool invert);
  26.    void removeGifImages();
  27.    void removeInlineFrames();
  28.    void removeObjectElements();
  29.    void removeEmbeddedElements();
  30.  
  31. private:
  32.    QString jQuery;
  33.    QWebView *view;
  34.    QLineEdit *locationEdit;
  35.    QAction *rotateAction;
  36.    int progress;
  37. //! [1]
  38. };

mainwindow.cpp
Código
  1. #include <QtGui>
  2. #include <QtWebKit>
  3. #include "mainwindow.h"
  4.  
  5. //! [1]
  6.  
  7. MainWindow::MainWindow()
  8. {
  9.    progress = 0;
  10.  
  11.    QFile file;
  12.    file.setFileName(":/jquery.min.js");
  13.    file.open(QIODevice::ReadOnly);
  14.    jQuery = file.readAll();
  15.    file.close();
  16. //! [1]
  17.  
  18.    QNetworkProxyFactory::setUseSystemConfiguration(true);
  19.  
  20. //! [2]
  21.    view = new QWebView(this);
  22.    view->load(QUrl("http://www.google.com/ncr"));
  23.    connect(view, SIGNAL(loadFinished(bool)), SLOT(adjustLocation()));
  24.    connect(view, SIGNAL(titleChanged(QString)), SLOT(adjustTitle()));
  25.    connect(view, SIGNAL(loadProgress(int)), SLOT(setProgress(int)));
  26.    connect(view, SIGNAL(loadFinished(bool)), SLOT(finishLoading(bool)));
  27.  
  28.    locationEdit = new QLineEdit(this);
  29.    locationEdit->setSizePolicy(QSizePolicy::Expanding, locationEdit->sizePolicy().verticalPolicy());
  30.    connect(locationEdit, SIGNAL(returnPressed()), SLOT(changeLocation()));
  31.  
  32.    QToolBar *toolBar = addToolBar(tr("Navigation"));
  33.    toolBar->addAction(view->pageAction(QWebPage::Back));
  34.    toolBar->addAction(view->pageAction(QWebPage::Forward));
  35.    toolBar->addAction(view->pageAction(QWebPage::Reload));
  36.    toolBar->addAction(view->pageAction(QWebPage::Stop));
  37.    toolBar->addWidget(locationEdit);
  38. //! [2]
  39.  
  40. //! [3]
  41.    QMenu *effectMenu = menuBar()->addMenu(tr("&Effect"));
  42.    effectMenu->addAction("Highlight all links", this, SLOT(highlightAllLinks()));
  43.  
  44.    rotateAction = new QAction(this);
  45.    rotateAction->setIcon(style()->standardIcon(QStyle::SP_FileDialogDetailedView));
  46.    rotateAction->setCheckable(true);
  47.    rotateAction->setText(tr("Turn images upside down"));
  48.    connect(rotateAction, SIGNAL(toggled(bool)), this, SLOT(rotateImages(bool)));
  49.    effectMenu->addAction(rotateAction);
  50.  
  51.    QMenu *toolsMenu = menuBar()->addMenu(tr("&Tools"));
  52.    toolsMenu->addAction(tr("Remove GIF images"), this, SLOT(removeGifImages()));
  53.    toolsMenu->addAction(tr("Remove all inline frames"), this, SLOT(removeInlineFrames()));
  54.    toolsMenu->addAction(tr("Remove all object elements"), this, SLOT(removeObjectElements()));
  55.    toolsMenu->addAction(tr("Remove all embedded elements"), this, SLOT(removeEmbeddedElements()));
  56.  
  57.    setCentralWidget(view);
  58.    setUnifiedTitleAndToolBarOnMac(true);
  59. }
  60. //! [3]
  61.  
  62. //! [4]
  63. void MainWindow::adjustLocation()
  64. {
  65.    locationEdit->setText(view->url().toString());
  66. }
  67.  
  68. void MainWindow::changeLocation()
  69. {
  70.    QUrl url = QUrl(locationEdit->text());
  71.    view->load(url);
  72.    view->setFocus();
  73. }
  74. //! [4]
  75.  
  76. //! [5]
  77. void MainWindow::adjustTitle()
  78. {
  79.    if (progress <= 0 || progress >= 100)
  80.        setWindowTitle(view->title());
  81.    else
  82.        setWindowTitle(QString("%1 (%2%)").arg(view->title()).arg(progress));
  83. }
  84.  
  85. void MainWindow::setProgress(int p)
  86. {
  87.    progress = p;
  88.    adjustTitle();
  89. }
  90. //! [5]
  91.  
  92. //! [6]
  93. void MainWindow::finishLoading(bool)
  94. {
  95.    progress = 100;
  96.    adjustTitle();
  97.    view->page()->mainFrame()->evaluateJavaScript(jQuery);
  98.  
  99.    rotateImages(rotateAction->isChecked());
  100. }
  101. //! [6]
  102.  
  103. //! [7]
  104. void MainWindow::highlightAllLinks()
  105. {
  106.    QString code = "$('a').each( function () { $(this).css('background-color', 'yellow') } )";
  107.    view->page()->mainFrame()->evaluateJavaScript(code);
  108. }
  109. //! [7]
  110.  
  111. //! [8]
  112. void MainWindow::rotateImages(bool invert)
  113. {
  114.    QString code;
  115.    if (invert)
  116.        code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(180deg)') } )";
  117.    else
  118.        code = "$('img').each( function () { $(this).css('-webkit-transition', '-webkit-transform 2s'); $(this).css('-webkit-transform', 'rotate(0deg)') } )";
  119.    view->page()->mainFrame()->evaluateJavaScript(code);
  120. }
  121. //! [8]
  122.  
  123. //! [9]
  124. void MainWindow::removeGifImages()
  125. {
  126.    QString code = "$('[src*=gif]').remove()";
  127.    view->page()->mainFrame()->evaluateJavaScript(code);
  128. }
  129.  
  130. void MainWindow::removeInlineFrames()
  131. {
  132.    QString code = "$('iframe').remove()";
  133.    view->page()->mainFrame()->evaluateJavaScript(code);
  134. }
  135.  
  136. void MainWindow::removeObjectElements()
  137. {
  138.    QString code = "$('object').remove()";
  139.    view->page()->mainFrame()->evaluateJavaScript(code);
  140. }
  141.  
  142. void MainWindow::removeEmbeddedElements()
  143. {
  144.    QString code = "$('embed').remove()";
  145.    view->page()->mainFrame()->evaluateJavaScript(code);
  146. }
  147. //! [9]

symbianpkgrules.pri
Código:
!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!


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: 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!


Título: Re: es posible hacer un navegador web con solo conocer el lenguaje C
Publicado por: linux1 en 5 Julio 2010, 16:51 pm
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.