webkit×Ô´ø¹È¸èä¯ÀÀÆ÷ʵÀý·ÖÎö

2026/4/26 15:39:13

Webkit×Ô´ø¹È¸èä¯ÀÀÆ÷ʵÀý·ÖÎö£¨1£©

ÏÈ¿´ÏÂÕâ¸ö¼òµ¥ä¯ÀÀÆ÷µÄͼƬЧ¹û

ÎÒÕâ¸ö³ÌÐòÔ´´úÂëÊÇÓÃsource insightÔĶÁµÄ£¬£¬£¬source insightÔõÒ»¸öÇ¿×ÖÁ˵ã¿£¡ ´Ómainº¯Êý¿ªÊ¼·ÖÎö£º int

main (int argc, char* argv[]) {

gtk_init (&argc, &argv); /*³õʼ»¯gtkÕû¸öʵÀý£¬Ã¿¸ögtkÖбØÓеÄ*/ if (!g_thread_supported ()) g_thread_init (NULL);

GtkWidget* vbox = gtk_vbox_new (FALSE, 0); /*´´½¨Ò»¸ö´¹Ö±µÄboxÀ´´æ·ÅÏÂÁÐ ²¿¼þ£¬´´½¨²¢Ìí¼Ó¹¤¾ßÀ¸£¨toolbar£©¡¢ä¯ÀÀÆ÷£¨browser£©¡¢×´Ì¬À¸£¨statusbar£©*/ gtk_box_pack_start (GTK_BOX (vbox), create_toolbar (), FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox), create_browser (), TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), create_statusbar (), FALSE, FALSE, 0);

main_window = create_window ();/*´´½¨Ö÷´°¿Ú£¬·ÅÖÃvbox*/

gtk_container_add (GTK_CONTAINER (main_window), vbox); /*½«vbox·ÅÈëÖ÷´°¿Ú*/

/*ÅжÏÊÇ·ñÊäÈëÍøÖ·Ò²¾ÍÊÇÃüÁîÐвÎÊý£¬Óеϰ½«Öµ¸øuri£¬Ã»ÓеϰÉèΪĬÈÏ*/ gchar* uri = (gchar*) (argc > 1 ? argv[1] : \ webkit_web_view_load_uri (web_view, uri);/*µ÷ÓÃwebkit¿âº¯Êý¼ÓÔØuriÍøÖ·*/

gtk_widget_grab_focus (GTK_WIDGET (web_view));/ץȡweb_viewÉϵĽ¹µã£¿*/

/*ÏÖʵÕû¸öÖ÷´°¿Ú£¬Ò²¾ÍÊÇä¯ÀÀÆ÷´°¿Ú*/ gtk_widget_show_all (main_window); gtk_main ();

return 0; }

Ö÷º¯Êý´Óǰµ½ºó¶ÁÏÂÀ´»ù±¾Ã»Ê²Ã´ÎÊÌ⣬ֻÊǶÔweb_viewÓеãÀ§»ó£¬ÓÚÊÇÕÒµ½¶¨ÒåµÄµØ·½

static WebKitWebView* web_view; /*ºÜÏÔÈ»ÊÇÒ»¸öÈ«¾Ö¾²Ì¬±äÁ¿*/

ÔÚwebkitµÄÔ´Âë°üÖеÄgtkĿ¼ÏµÄwebkitϵÄWebkitwebview.h²éÕÒWebKitWebView£º ·¢ÏÖtypedef struct _WebKitWebView WebKitWebView; struct _WebKitWebViewµÄ½á¹¹Îª£º struct _WebKitWebView {

GtkContainer parent_instance; /*< private >*/

WebKitWebViewPrivate *priv; };

ÒÀÈ»²»´ó¶®£¬¼ÌÐøÍÚ¾òWebKitWebViewPrivate£ºÕæÊÇÓÐÖÖȡ֮²»¾¡ÍÚÖ®²»¾øµÄ¸Ð¾õ O(¡É_¡É)O

typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate; ÔÙÍùÏ¿´ÖÕÓÚ¿´µ½Êï¹âÁË£º

struct _WebKitWebViewPrivate {

WebCore::Page* corePage; /*Õâ¸öÓ¦¸ÃÊǺËÐÄÒ³Ãæ°É*/

WebKitWebSettings* webSettings; /*Ò³ÃæÓйصÄÉèÖÃľÓÐϸÍÚ£¬Ë®Ì«Éî*/ WebKitWebInspector* webInspector; /*ʲô¼ì²éÔ±£¿*/

WebKitWebWindowFeatures* webWindowFeatures; /*WindowµÄÌØÐÔ*/

WebKitWebFrame* mainFrame; /*webÖ÷¿ò¼Ü*/

WebKitWebBackForwardList* backForwardList; /*±£´æÇ°½øºóÍ˵ÄÁ´±í*/

gint lastPopupXPosition; /*²»Ì«¶®*/ gint lastPopupYPosition; /*ÒÀÈ»²»Ì«¶®*/ ´Ë´¦Ò²Ê¡ÂԺܶà

};

WebCore::Page*£¿ÊÇʲô¶«¶«£¿ÕæÊÇÒ»²¨Î´Æ½Ò»²¨ÓÖÆð£¬±­¾ßÖ®ÇéÓÍÈ»¶øÉú£¬¾¿¾¹ºÎʱÊǾ¡Í·£¬£¬£¬£¿·ÅÆúor¼ÌÐø×ßÏÂÈ¥£¿Æäʵ±¾À´Ïë·ÅÆúµÄ£¬µ«ÊÇÏëÏë¶¼ÍÚÁËÕâôÉîÁË£¬·ÅÆúÁË¿ÉϧÍÛ£¬£¬£¬go ahead£¡¼ÌÐøÍÚ£º

ºÎΪÃüÃû¿Õ¼ä£¿¾Ý¡¶c++primer¡·´«ÑÔ£¬Ò»°ã´óÐͳÌÐò»òÕß¿âÎļþÓкܶàÈ«¾Ö±äÁ¿£¬ÕâЩ±äÁ¿ÖØÃûµÄ¸ÅÂÊÊÇÏ൱µÄ¸ß£¬ËùÒԾͻáÒýÆðÃû×Ö³åÍ»£¬¡¶C++primer¡·ÆðÁ˸öÑóÆøµÄÃû×Ö£¬½Ð¡°ÃüÃû¿Õ¼äÎÛȾ¡±£¬Æäʵ¾ÍÊÇÖØÃûÒýÆð³åÍ»¶øÒÑ¡£ÎªÁ˱ÜÃâÕâÖÖÎÛȾ£¬¾ÍÓÐÁËÃüÃû¿Õ¼ä¡£

namespace WebCore {

AccessibilityARIAGrid::AccessibilityARIAGrid(RenderObject* renderer) : AccessibilityTable(renderer)

{

#if ACCESSIBILITY_TABLES

m_isAccessibilityTable = true; #else

m_isAccessibilityTable = false; #endif

}/*²Á??ÎÞÇÄÅ~*/

ÍÚÁ˰ëÌ죬»¹ÊÇûÓп´µ½page£¬Ô­À´ÊÇÎļþÕÒ´íÁˡѩn¡Ñbº¹£¬£¬£¬¼ÌÐøÍÚ£¬£¬£¬ÖÕÓÚÔÚWebKit-r47011\\WebCore\\page\\gtkÏÂÃæµÄEventHandlerGtk.cppÖз¢ÏÖÁËÕâ¸ö¶«¶«£¬µ«ÊÇÆ¾ÎÒµÄÖÇÉÌ£¬ÔÝʱÕâ¿é»¹ÊÇÏȲ»ÍÚÁË£¬ÎªÉ¶£¿Çë×¢Òâ¿´??¼ûÖ¤ÀúÊ·µÄʱ¿Ìµ½ÁË

namespace WebCore {

class Chrome;

class Page : public Noncopyable

{

public:

static void setNeedsReapplyStyles();

Page(ChromeClient*, ContextMenuClient*, EditorClient*, DragClient*, InspectorClient*);

~Page();

RenderTheme* theme() const { return m_theme.get(); };

static void refreshPlugins(bool reload); PluginData* pluginData() const;

void setCanStartPlugins(bool);

bool canStartPlugins() const { return m_canStartPlugins; } void addUnstartedPlugin(PluginView*); void removeUnstartedPlugin(PluginView*);

EditorClient* editorClient() const { return m_editorClient; }

void setMainFrame(PassRefPtr);

Frame* mainFrame() const { return m_mainFrame.get(); }

BackForwardList* backForwardList(); ????

´Ë´¦Ê¡ÂÔn¶àÐиö??£¬n>100 }£¿end Page£¿/*Ã²ËÆÕâ¸öÊÇwebkitÌØÓеÄ×¢ÊÍ( ¡Ño¡Ñ )ÍÛ£¬¾­²éÖ¤ÊÇSIµÄ·ç¸ñ*/

} ?end WebCore?

ÖÁ´Ë ±¾ÎļþµÄWebCoreÃüÃû¿Õ¼ä×ÜËãÊÇÍê³ÉÁË£¬£¬£¬ÎÒÕâÀïÌù¹ýÀ´µÄ´úÂë´ó¸ÅÊÇÊ®·ÖÖ®Ò»×óÓÒ£¬£¬£¬¨q(¨s^¨t)¨r£¬ÖªµÀÎÒΪɶ²»ÍÚÁ˰ɣ¬£¬£¬ÍÚ²»Íê(¡Ño¡Ñ)£¡£¬´ó¸ÅÖªµÀ¾ÍÐÐÁËÂPageÊǸÉÂïµÄ£¿ÓëÒ³ÃæÏà¹ØµÄ·ç¸ñ¡¢Ö÷Ìâ¡¢¿ò¼ÜµÄÉèÖᢲå¼þ¡¢Ç°½øºóÍ˵ÄÁ´±í£¬µÈµÈµÈµÈ¡£Õû¸öÎļþ¾ÍÏȲ»ÍÚÁË£¬£¬£¬ÏÖÔÚÍÚÍêÒÔºó¾ÍûʸÉÁË

¿´µ½ÕâÀ£¬£¬ãÂã¶®¶®µÄÃ²ËÆÖªµÀÁËweb_viewÊÇʲô¶«¶«ÁË£¬£¬£¬Ó¦¸Ã¾ÍÊÇä¯ÀÀÆ÷ÏÔÊ¾ÍøÕ¾µÄÄDz¿·ÖÊÓͼÍÛ£¬ÆäÖоͰüº¬page£¬²»¹ÜÁËÏÈÕâôÀí½â£¬µÈÕæÕýÀí½âÁËÔÙ·´¹ýÀ´¿´

ÏÖÔÚ£¬mainº¯ÊýÖÐÒÀÈ»ëüëʵĺ¯Êý¾ÍÊÇÏÂÃæµÄÁ½¸öÁË£¬£¬£¬ÍÛ£¡ÍÚ£¡ÂíÉÏÍÚÍêÁË webkit_web_view_load_uri (web_view, uri)£» gtk_widget_grab_focus (GTK_WIDGET (web_view));

Õâ¸ö¿É±Èweb_viewºÃÍÚ¶àÁË£¬£¬£¬WebKit-r47011\\WebKit\\gtk\\webkitµÄwebkitwebview.hÏÂÃæ£¬Ò»Ä¿ÁËÈ»£¡

void webkit_web_view_load_uri(WebKitWebView* webView, const gchar* uri) {

g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));/*ÕâÀïÓ¦¸ÃÊÇ´íÎó¼ì²â»úÖÆ*/ g_return_if_fail(uri);

WebKitWebFrame* frame = webView->priv->mainFrame; webkit_web_frame_load_uri(frame, uri); }

void webkit_web_frame_load_uri(WebKitWebFrame* frame, const gchar* uri) {

g_return_if_fail(WEBKIT_IS_WEB_FRAME(frame)); g_return_if_fail(uri);

Frame* coreFrame = core(frame); if (!coreFrame) return;

coreFrame->loader()->load(ResourceRequest(KURL(KURL(), String::fromUTF8(uri))), false); }

Òâ˼¾ÍÊÇFrameÀàÐ͵ÄcoreFrame¶ÔÏóµÄloader()³ÉÔ±º¯ÊýµÄ·µ»ØÖµÊÇFrameLoaderÀàÐ͵ĶÔÏó£¬È»ºóFrameLoaderÀàÓÖÓÐload£¨x£¬x£¬x£©³ÉÔ±º¯Êý£¬£¬£¬£¨ºÃ¾À½á£©ÎÒ¹À¼ÆwebkkitÊǽ«¡°->¡±ÔËËã·ûÖØÔØÁË¡£·´Õý¾ÍÊÇÒª¼ÓÔØÍøÖ·uriÔÚwebviewÖÐÏÔʾ¡£

¡Ñ©n¡Ñbº¹£¬£¬£¬ËµÀ´±­¾ß£¬£¬£¬ÎÒÊÇÓÃGTK×÷Ϊ¿ª·¢¹¤¾ß£¬£¬£¬ËùÒÔÒ»Ö±ÒÔΪwebkitÊÇÓÃGObjectʵÏֵ쬣¬£¬ÖªµÀ¿´µ½ÏÖÔڲŷ¢ÏÖwebkitÊÇÓÃC++ʵÏֵ쬣¬£¬ÎÒÀÕ¸öÈ¥£¡ÎÒ˵Õâ¸öwebkitÄ£·ÂC++Ҳģ·ÂµÄ߯ÏñÁ˰ɣ¬°¡Å¶£¬±­¾ß??

ÏÂÃæ¿´ÏÂgtk_widget_grab_focus (GTK_WIDGET (web_view))£¬Õâ¸öÊÇGtkµÄº¯Êý£¬±ÈwebkitºÃ¶àÁË£¬£¬£¬¸Â¸Â~

Void gtk_widget_grab_focus (GtkWidget *widget)ÎÒÊÇÕâÑùÀí½âµÄ£ºÈÃwidgetÄܹ»ÎªÕû¸ö´°¿Ú²¶»ñ¼üÅ̵Ľ¹µã¡£

ÄÇôÕû¸ömainº¯ÊýÒÔ¼°µÚ¶þ²ã£¨½Ó¿Úº¯Êý£©ÏÖÔÚÎÒÃǾÍ×ßͨÁË£¬£¬£¬ÔÛÊDz»ÊÇÒ²¿ÉÒÔд


webkit×Ô´ø¹È¸èä¯ÀÀÆ÷ʵÀý·ÖÎö.doc ½«±¾ÎĵÄWordÎĵµÏÂÔØµ½µçÄÔ
ËÑË÷¸ü¶à¹ØÓÚ£º webkit×Ô´ø¹È¸èä¯ÀÀÆ÷ʵÀý·ÖÎö µÄÎĵµ
Ïà¹ØÍÆ¼ö
Ïà¹ØÔĶÁ
¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩

ÏÂÔØ±¾ÎĵµÐèÒªÖ§¸¶ 10 Ôª

Ö§¸¶·½Ê½£º

¿ªÍ¨VIP°üÔ»áÔ± ÌØ¼Û£º29Ôª/ÔÂ

×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºxuecool-com QQ£º370150219