zoukankan      html  css  js  c++  java
  • webkit初探

    今天用vs单步跟了一下webkit的运行流程,基本是这样的

    1.WinLauncher 里面的 _WINMAIN_   做一些程序的加载 然后进入

    2.通过函数 entryPoint(hInstance, hPrevInstance, lpstrCmdLine, nCmdShow);

    #if USE_CONSOLE_ENTRY_POINT
        typedef int (WINAPI*EntryPoint)(int, const char*[]);
        const char* entryPointName = "_dllLauncherEntryPoint@8";
    #else
        typedef int (WINAPI*EntryPoint)(HINSTANCE, HINSTANCE, LPWSTR, int);
        const char* entryPointName = "_dllLauncherEntryPoint@16";
    #endif 

    //应该是利用工厂方法获得正确的处理函数

    EntryPoint entryPoint = reinterpret_cast<EntryPoint>(::GetProcAddress(module, entryPointName));// 看起来像一个仿函数,先不管,继续往后看

    3.进入extern "C" __declspec(dllexport) int WINAPI dllLauncherEntryPoint(HINSTANCE, HINSTANCE, LPTSTR, int nCmdShow)

    做一些初始化工作,包括创建win窗口,建立frame对象等等

    。。。。。

    IWebFrame* frame;
        hr = gWebView->mainFrame(&frame);
        if (FAILED(hr))
            goto exit;

        static BSTR defaultHTML = SysAllocString(TEXT("<p style=\"background-color: #00FF00\">Testing</p><img id=\"webkit logo\" src=\"http://webkit.org/images/icon-gold.png\" alt=\"Face\"><div style=\"border: solid blue; background: white;\" contenteditable=\"true\">div with blue border</div><ul><li>foo<li>bar<li>baz</ul>"));
        frame->loadHTMLString(defaultHTML, 0);

    4.进入WebFrame::loadHTMLString 开始对网页进行读取

    RefPtr<SharedBuffer> sharedBuffer = SharedBuffer::create(reinterpret_cast<char*>(string), sizeof(UChar) * SysStringLen(string));
        BString utf16Encoding(TEXT("utf-16"), 6);
        loadData(sharedBuffer.release(), 0, utf16Encoding, baseURL, unreachableURL);

    //前两行是获取对webkit内部字符编码的格式 ,第三行进入loaddata开始对url请求进行处理

    5.WebFrame::loadData(PassRefPtr<WebCore::SharedBuffer> data, BSTR mimeType, BSTR textEncodingName, BSTR baseURL, BSTR failingURL)

        String mimeTypeString(mimeType, SysStringLen(mimeType));
        if (!mimeType)
            mimeTypeString = "text/html";

        String encodingString(textEncodingName, SysStringLen(textEncodingName)); // 获取内部处理字符编码的格式

        // FIXME: We should really be using MarshallingHelpers::BSTRToKURL here,
        // but that would turn a null BSTR into a null KURL, and we crash inside of
        // WebCore if we use a null KURL in constructing the ResourceRequest.
        KURL baseKURL = KURL(KURL(), String(baseURL ? baseURL : L"", SysStringLen(baseURL))); //对url进行预处理,包括解析host,path。fragement等等

        KURL failingKURL = MarshallingHelpers::BSTRToKURL(failingURL);

        ResourceRequest request(baseKURL); 
        SubstituteData substituteData(data, mimeTypeString, encodingString, failingKURL);

        // This method is only called from IWebFrame methods, so don't ASSERT that the Frame pointer isn't null.
        if (Frame* coreFrame = core(this))
            coreFrame->loader()->load(request, substituteData, false);

    饿  在上班呢 今天看到这里,未完待续!

     

     

  • 相关阅读:
    Spring 中的事务操作、注解、以及 XML 配置
    ..OBJLED.axf: Error: L6218E: Undefined symbol EXTI_Init (referred from exti.o). 错误修改
    ADC分辨率
    单片机ADC检测4-20mA电路,以及计算方法
    STM32速度---网页讲解
    转载电子发烧友网---STM32的IO口灌入电流和输出驱动电流
    精密电阻性能
    ..OBJCAN.axf: Error: L6411E: No compatible library exists with a definition of startup symbol __main.
    asp.net---jquery--ajax 实现滚动条滚动到底部分页显示
    柱状图dataLabels 文字格式 以及如何获取柱子的name(名称)属性
  • 原文地址:https://www.cnblogs.com/liucheng/p/2504091.html
Copyright © 2011-2022 走看看