2020.7.3日报:搞定ie内核icon,以及莫名其妙的鼠标消息问题

    技术2022-08-31  93

    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);

    搞定。

    Processed: 0.011, SQL: 9