Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

编译说明 #2

Open
wants to merge 97 commits into
base: master
Choose a base branch
from
Open

编译说明 #2

wants to merge 97 commits into from

Conversation

BrentHuang
Copy link

建议增加一个“win7+vs2008编译说明”文件,内容如下:

项目地址:https://github.com/cexer/wke
编译环境:win7+vs2008

如果没有意外,拉取代码后进入vs2008目录,打开sln可以直接编译通过。但是由于各种原因,总会遇到七七八八的问题,下面就理一下。

1,如果git设置了拉取代码时将换行符转换成windows的,下载dos2unix-7.3.1-win32.zip工具包,解压到C盘,将C:\dos2unix-7.3.1-win32\bin添加到PATH中,
(1)使用dos2unix.exe对所有sh、asm脚本作了处理,保证所有的sh、asm脚本的换行符都是unix格式的,而非dos格式的
(2)使用dos2unix.exe处理keywords.table文件
【重要:建议在linux下执行git clone https://github.com/cexer/wke.git把代码拉下来,然后打包到windows上用vs2008编译,这样就不需要使用dos2unix.exe转换任何文件!!】

2,项目依赖关系
wkeBrowser -> wke -> WebCore -> WebCoreGenerated -> JavaScriptCore -> WTF -> JavaScriptCoreGenerated
最先编译JavaScriptCoreGenerated,然后依次向前。如果一次全部编译不过,可以按照依赖关系逐个工程编译。

3,如果想通过命令行编译,为了使用nmake等命令行工具,需要将下面两个路径添加到PATH中
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE
路径前一段相同的那部分是vs的安装路径。

4,注意:一定要使用vs2008,不要用其他版本自动升级vs2008的sln,特别是vs2010,没有兼容性,会报一堆错误。

感谢 SOUI 的作者,其主要增加了两个功能:
* wkePaint 拷贝页面的内容图像到指定内存。
* wkeBufHandler 当页面的内容图像更新时回调通知。
* 修改 jsObject、jsArray 函数名为 jsEmptyObject、jsEmptyArray,使其名称更符合实际功能。
* 去掉 jsFunction 函数。
* 增加新的 jsObject、jsFunction 函数用于实现对象和函数的绑定,针对单独页面的绑定。
* 增加 Document 目录,用于存放一些说明性的东西。
JSC::Identifier 内部以 JSC::UString 保存属性名称,而 JSC::UString 内部把 char* 类型字符串的指针值作为其 hash 值,虽然在一个字符串内存上设置了与前次不同的字符串内容,但因为使用了同一内存地址(指针相同), hash 值相同,会认为是同一个字符串。
WebCore::Document::completeURL 当中构造 KURL 对象时,会调用 encodeRelativeString 将所有 URL(包括本地路径)转换为 UTF-8 编码,导致文件打开失败,显然在 Windows 上路径应该是 GBK。可用 wkeBrowser 加载 demo/bin/english.html 测试。
wkeLoadURL 调用 KURL::KURL(const KURL& base, const String& relative, const TextEncoding&) 构造 KURL ,第二个参数传入的是 const char* 类型的 UTF-8 字符串以构造一个 WTF::String 对象,然而 WTF::String::String(const char*) 是把字符串按照 latin1 处理的,正确应该使用 WTF::String::fromUTF8 显式从 UTF-8 构造。可以用 wkeBrowser 加载 demo/bin/中文.html 测试。
合并 zhanjx1314 实现的获取 cookie 的功能(wchar_t* 版本),并在其基础上增加了一个 utf8* 版本的重载,另外在 webBrowser 中增加一个菜单项测试此功能。
合并 zhanjx1314 实现的 wkePostURL 函数,该函数可以 POST 方式加载页面。
每条记录不再使用严格的 markdown 格式,改为直接使用提交日志的纯文本,但增加 markdown 三级标题。
每条记录的标题修改为四级标题,因三级在浏览器中查看太大。
* 去掉 wkeBufHandler,将功能合并到 wkeClientHandler 当中。
* wkeClientHandler 中增加一个回调参数,以传递自定义参数。
* 去掉 wkeClientHandler 的 const 属性,避免在回调处理中要需要非 const 访问时导致问题。
* 编写项目规范,位于 Document/rules.md,合作提交的朋友请按规范编写文档和代码。目前此规范还不完善,后续继续添加。
* 根据 Document/rules.md 中的命名规范,以及使语法更正确、含义更清晰,作了以下命名调整:
    - 更名 wkeClientHandler 为 wkeViewHandler(因这里的 "Client" 一词实际上是 WebKit 内部实现相关的东西,在接口中不需要)。
    - 更名 wkeSetClientHandler 为 wkeSetHandler (去掉 Client)。
    - 更名 IWebView::setClientHandler 为 IWebView::setHandler (去掉 Client)。
    - 更名 IWebView::getClientHandler 为 IWebView::handler (去掉 Client、成员函数获取属性不加 get)。
    - 更名 IWebView::cookieEnabled 为 IWebView::isCookieEnabled (获取是否属性前面加 is)。
    - 更名 IWebView::getCaret 为 IWebView::caretRect (成员函数获取属性不加 get、使含义更明确)。
    - 更名 IWebView::getViewDC 为 IWebView::viewDC (成员函数获取属性不加 get)。
    - 更名 IWebView::transparent 为 IWebView::isTransparent (获取是否属性前面加 is)。
    - 更名 IWebView::awaken 为 IWebView::wake(执行操作的函数使用动词)。
    - 更名 IWebView::contentsHeight 为 IWebView::contentHeight(content 即可代表所有内容,无需复数)。
    - 更名 IWebView::contentsWidth 为 IWebView::contentWidth(content 即可代表所有内容,无需复数)。
    - 更名 IWebView::contextMenuEvent 为 IWebView::fireContextMenuEvent(使含义更准确)。
    - 更名 IWebView::copy 为 IWebView::editorCopy (使含义更准确)。
    - 更名 IWebView::cut 为 IWebView::editorCut (使含义更准确)。
    - 更名 IWebView::delete_ 为 IWebView::editorDelete (使含义更准确)。
    - 更名 IWebView::focus 为 IWebView::setFocus (使含义更准确)。
    - 更名 IWebView::isLoadComplete 为 isLoadingCompleted (语法更准确、统一)。
    - 更名 IWebView::isLoaded 为 isLoadingSucceeded (语法更准确、统一)。
    - 更名 IWebView::isLoadFailed 为 isLoadingFailed (语法更准确、统一)。
    - 更名 IWebView::keyDown 为 IWebView::fireKeyDownEvent(使含义更准确)。
    - 更名 IWebView::keyPress 为 IWebView::fireKeyPressEvent(使含义更准确)。
    - 更名 IWebView::keyUp 为 IWebView::fireKeyUpEvent(使含义更准确)。
    - 更名 IWebView::mouseEvent 为 IWebView::fireMouseEvent(使含义更准确)。
    - 更名 IWebView::mouseWheel 为 IWebView::fireMouseWheelEvent(使含义更准确)。
    - 更名 IWebView::paste 为 IWebView::editorPaste (使含义更准确)。
    - 更名 IWebView::selectAll 为 IWebView::editorSelectAll  (使含义更准确)。
    - 更名 IWebView::tick 为 IWebView::IWebView::repaintIfNeeded(使含义更准确)。
    - 更名 IWebView::unfocus 为 IWebView::killFocus(使含义更准确) 。
    - 更名 jsObjectData 为 jsData(Object 函数统一不加 Object)。
    - 更名 jsObjectGetData 为 jsGetData(Object 函数统一不加 Object)。
    - 更名 ON_PAINT_UPDATED 为 wkeOnPaintUpdated(类型用大驼峰命名法)。
    - 更名 ON_TITLE_CHANGED 为 wkeOnTitleChanged(类型用大驼峰命名法)。
    - 更名 ON_URL_CHANGED 为 wkeOnUrlChanged(类型用大驼峰命名法)。
    - 更名 wkeInit 为 wkeInitialize (使含义更准确)。
    - 更名 wkeShutdown 为 wkeFinalize (使含义更准确)。
    - 更名 wkeVersion 为 wkeGetVersion(非成员函数获取数据加 get)。
    - 更名 wkeVersionString 为 wkeGetVersionString(非成员函数获取数据加 get)。
    - 更名 wkeTitle 为 wkeGetTitle,wkeTitleW 为 wkeGetTitleW(非成员函数获取数据加 get)。
    - 更名 wkeWidth 为 wkdGetWidth(非成员函数获取数据加 get)。
    - 更名 wkeHeight 为 wkdGetHeight(非成员函数获取数据加 get)。
    - 更名 wkeWebViewName 为 wkeGetName(非成员函数获取数据加 get、WebView 相关操作函数命名统一不加 WebView)。
    - 更名 wkeZoomFactor 为 wkeGetZoomFactor(非成员函数获取数据加 get)。
    - 更名 wkeAwaken 为 wkeWake(wake 动词含义更准确)。
    - 更名 wkeContentsWidth 为 wkdGetContentWidth(content 即可代表所有内容无需复数、非成员函数获取数据加 get)。
    - 更名 wkeContentsHeight 为 wkeGetContentHeight(content 即可代表所有内容无需复数、非成员函数获取数据加 get)。
    - 更名 wkeSelectAll 为 wkeEditorSelectAll (使含义更准确)。
    - 更名 wkeCopy 为 wkeEditorCopy (使含义更准确)。
    - 更名 wkeCut 为 wkeEditorCut (使含义更准确)。
    - 更名 wkePaste 为 wkeEditorPaste (使含义更准确)。
    - 更名 wkeFocus 为 wkeSetFocus(使含义更准确)。
    - 更名 wkeUnfocus 为 wkeKillFocus(使含义更准确)。
    - 更名 wkeGlobalExec 为 wkeGetGlobalExec(非成员函数获取数据加 get)。
    - 更名 wkeIsLoadComplete 为 wkeIsLoadingCompleted  (语法更准确、统一)。
    - 更名 wkeIsLoaded 为 wkeIsLoadingSucceeded  (语法更准确、统一)。
    - 更名 wkeIsLoadFailed 为 wkeIsLoadingFailed  (语法更准确、统一)。
    - 更名 wkeMediaVolume 为 wkeGetMediaVolume(非成员函数获取数据加 get)。
    - 更名 wkeSetWebViewName 为 wkeSetName(WebView 相关操作函数命名统一不加 WebView)。
    - 更名 wkeCookieEnabled 为 wkeIsCookieEnabled(获取是否数据是前面加 is)。
    - 更名 wkeGetCaret 为 wkeGetCaretRect (使含义更明确)。
* webBrowser 增加命令行支持,若有命令行参数,则将其作为URL加载。
* 实现 ChromeClient::runOpenPanel 函数,打开文件对话框,支持 multipe 属性多选文件。可通过 demo/bin/file.html 和 Document/demo/file.asp 测试。
* 增加文件 readme.md 描述项目相关信息,并在末尾附原项目 readme.txt 的内容。
* 删除原项目 readme.txt 。
* 修改 readme.md 。
* 提交 Release 版本的 demo/bin/wke.dll 。
* 增加初始化函数 wkeInitializeEx,可在初始化时同时进行一些全局性地配置 。
* 通过 wkeInitializeEx 增加代理配置功能,目前仅支持 HTTP 代理。
* 修改 wkeBrowser 使用 wkeInitializeEx 进行初始化,并增加代理测试。
* 增加全局配置函数 wkeConfigure,可在初始化之后执行全局性的配置操作。
* 修改 wkeBrowser 使用 wkeConfigure 进行全局性配置。
* 增加代理类型socks4、socks4a、socks5、socks5h的支持,接口不用修改。
JSValueToXXXXX 和 JSObjectXXXX 函数族中的某些函数在转换/构造变量之后,会判断当前若有JS错误,则返回非法值。但这个错误有可能不是本次转换/构造中发生的,是由前次不相干的操作,比如某次脚本调用中的语法错误,此时返回非法值,则是不正确的。而且返回值不应该在调用完来修正,应该由被调用者来修正。
* 合并 zhanjx1314(群里(__少) 实现的设置 UserAgent 的功能。
* 在 webBrowser 当中测试了设置 UserAgent 的功能。
* 修改实现中(如 wkeChromeClient、wkeFrameLoaderClient 等)用到的 IWebView 为 CWebView,因为实现需要知道 IWebView 之外的、具体实现相关的信息,用 IWebView 不合适。
* 此修改为后续的实现作准备。
* 修改 wkeBrowser 对 wke 的调用为 C 接口调用,因 IWebView* 纯虚函数的调用方式,与 C 接口没有大的区别,择其一即可。而容 C 接口可兼容大多数的开发语言,所以保留 C 接口,为抛弃 C++ 接口做准备。
* 修正 wkeGetCookie、wkeGetCookieW 函数没有 wkeWebView 参数的 BUG。
* 更名 wkeGetCaret 为 wkeGetCaretRect 。
* 修改 wkeBrowser,默认关闭代理(取消定义宏 WKE_BROWSER_USE_LOCAL_PROXY)。
* 上次提交误提交了 Debug 版的 wke.dll,改为提交 Release 版的。
* 整理 wke 内部的结构,将所有的 *.inl 文件使用 .h 和 .cpp 进行分离。
* 在 wke.h 当中包含上 windows.h,因其需要 HDC 的定义。
* 修改 wkeString 的类型定义,使在 C 下更安全,在 C++ 下更方便。
* 更名 wkeToString 为 wkeGetString,更名 wkeToStringW 为 wkeGetStringW,使其符合 wke 的命令习惯 。
* 增加 wkeSetString 和 wkeSetStringW 。
cexer added 10 commits March 10, 2016 23:38
* 重构 wkexe 中一部分代码。
* 修改 wkexe 行为,若未在命令行指定参数,使用默认参数启动 about:blank 页面。
* 修改 wkexe 对于`html`参数的理解,现在可支持直接传递 html 内容,如:
```html
wkexe --html="<script>alert('Hello World!')</script>"
wkexe --html="<span>Hello World!</span>"
```
* 增加 wkexe 对于 cookie 文件路径的自定义支持,使用参数`cookie`设置路径。
* 修改 wkeLoadW、wkeLoad 以支持`about:blank`地址。
…CHILD 属性判断 BUG。

* 修正 CWebWindow::resize、CWebWindow::moveToCenter 的 WS_CHILD 属性判断不正确,导致以控件形式创建时位置不正确的问题。
* 实现默认 window.prompt 函数。
* 修改版本号为 1.2.1.0。
* 修改资源中相关网站地址为 www.github.com/cexer/wke。
* 取消 wke 对 WebCore 项目的依赖,防止每次从 WebCore 编译。
* 使用蚂蚁实现的 websocket,当前一个连接一个线程,有待优化。
…ath 发生断言失败的问题。

* 修正调用 WebCore::DatabaseTracker::setDatabaseDirectoryPath 发生断言失败的问题,改为在 wkeInitialize 时调用 WebCore::DatabaseTracker::initializeTracker。
* 使用群里蚂蚁的方法优化了绘制,妈妈再也不用担心 wke 绘制卡顿了。
* 增加了以下函数:
 - wkeSetRepaintInterval 设置 wkeRepaintIfNeededAfterInterval 调用 wkeRepaintIfNeed 的时间间隔。
 - wkeGetRepaintInterfal 获取 wkeRepaintIfNeededAfterInterval 调用 wkeRepaintIfNeed 的时间间隔。
 - wkeRepaintIfNeededAfterInterval 根据指定的时间间隔调用 wkeRepaintIfNeed。
 - wkeRepaintAllNeeded 调用所有 wkeWebView 的 wkeRepaintIfNeededAfterInterval。
 - wkeRunMessageLoop 消息循环 + wkeRepaintAllNeeded 的调用。

优化原理:以前的绘制是使用WM_TIMER定时器来重绘,当消息队列很忙的时候有可能不能及时绘制,造成卡顿,优化方法是在消息循环当中直接绘制,使绘制优先于消息处理。
* wke有几个命名,我想调整一下,问一下大家的意见,主要是基于两点原因
 1.现在句柄类型(wkeWebView、wkeString等)、指针类型(wkeSettings*、wkeConsoleMessaget*等)都在用,比较混乱。
 2.JS函数族,命名上加上wke。

改动如下:
- wkeWebView -> wkeWebView *
- wkeString -> wkeString *
- jsExecState -> wkeJSState *
- jsValue -> wkeJSValue
- ....
- jsCall -> wkeJSCall
- jsGet -> wkeJSGet
- ...

* 修改版本号为 1.2.2.0
* 所有JS接口上,添加 wkeJSState* 参数。
* 添加 wkeJSAddRef、wkeJSReleaseRef 函数,显式地引用变量,避免被 GC。
@Hopedream
Copy link

@BrentHuang @cexer @BlzFans 我现在的项目是多字节,不能改成unicode,所以出现网页输入中文是乱码,有没有什么解决办法呢?

cexer added 19 commits July 28, 2016 23:38
* 项目根目录增加 FAQ 文档,记录一下经常被问到的问题。
* 将 FAQ 直接放到 readme.md 当中。
* 修改 readme.md 排版。
* 修正 readme.md 中 FAQ 的链接问题。
* readme.md 中增加贡献者名单。
* 修改 readme.md 一些语法问题。
* 在 readme.md 中,将编译指南从 FAQ 中单独提出来。
* 增加一条 FAQ:`FAQ1. wke 对 HTML5 的支持如何`。
* 使用最新的 libcurl 7.50 源码,LIB Release - DLL Windows SSPI + MT 生成新的 libcurl_imp.lib,修正了有时 HTTPS 失败的问题(例如 https://wx.qq.com 无法打开的问题)。
* 修改版本号为 1.2.1.2。
* 处理 WM_SETCURSOR 消息,修正编辑框当中光标闪烁的问题。
* 修改版本号为 1.2.1.3。
* 中增加了使用 git 同步更新代码的方法说明。
* readme.md 细节调整。
* readme.md 中去掉 vs2015,现在还没有 vs2015 工程。
* 修正更新 libcurl 之后 wkeSetFileSystem 无效的问题,失效是因为 libcurl 的函数没有替换为 wkeSetFileSystem 设置的。
* wkexe.exe 增加 --useragent 参数设置 UserAgent。
* 更新 libcurl 为 7.50.1 版本。同时也修正了因 libcurl 原因 wkeSetFileSystem 失效的问题(貌似之前修正过一次。。。)。
* 修正 wkeLoadHtml(W) 加载页面内容时,wkeSetFileSystem 回调失效的问题。
* 修改 libcurl 相关的 vsprops。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants