1,先说这个鼠标消息。很奇葩。ie内核下点击ie的页面,整个chrome父窗口竟然不会弹到最上层。另外如果ie里面如果有ax控件,控件里面又有子窗口,也不会收到mousedown消息。但能收到mouseup消息。这是个很蛋疼的bug。找了N多资料,终于发现原因:原来我用SetParent挂靠到chrome窗口上时,没写这句:
::SetWindowLong(hwnd_, GWL_STYLE, WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VISIBLE | WS_CHILD);
核心就是要设置 WS_CHILD,并且去掉WS_POPUP。
太诡异了。后来发现msdn上说,SetParent确实不会设置这两属性。但我当时写快了,就忘记下这个SetWindowLong了。没想到其他用的都是正常的,就鼠标消息和焦点有问题。
2,chrome的favicon,比较复杂。
G:\chromium\M75\src\components\favicon\core\favicon_handler.cc
G:\chromium\M75\src\components\favicon\content\content_favicon_driver.cc
这里有相关代码。但实际中,我的ie窗口是window.open 打开的,会收不到loadevent和另外个什么消息
(WebContentsImpl::DidFinishNavigation、WebContentsImpl::DocumentOnLoadCompleted)
。导致icon想设置进去还挺麻烦的。后来我直接在WebContentsImpl::OnUpdateFaviconURL里面强制:
favicon::ContentFaviconDriver* faviconDriver = WebContentsUserData<favicon::ContentFaviconDriver>::FromWebContents(this); faviconDriver->FetchFavicon(GetURL(), true);
content::WebContentsObserver* faviconDri = (content::WebContentsObserver*)faviconDriver; faviconDri->DidUpdateFaviconURL(candidates);
搞定。
