yyzq |
2019-03-27 18:51 |
解决cef浏览器无法显示tooltip问题(标签中的title属性无效)和详细分析
开发环境
VS2012 + Qt5.4.0 + cef_binary_3.3396.1786.gd3e36d0_windows32
问题介绍
CEF浏览器加载HTML文件后,标签中的title属性无效,鼠标停留在上面无tooltip弹出。
解决方案
解决方法参考了这篇博客 https://www.cnblogs.com/luckbird/p/cef-tooltip.html
思考
为什么按照该博客介绍的方法就可以了呢?由于我对manifest不是很熟悉,所以先去查找学习了一些相关知识。如果对manifest比较熟悉的话,应该可以很快的看出
其实就是在manifest加入了附加清单依赖项,也就是下面这段
<dependency> <dependentAssembly> <assemblyIdentity type="Win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity> </dependentAssembly> </dependency>
知道了这一点后,再结合前面学习manifest过程中学到的知识,我们可以简化一些操作,说实话我在按照原博客介绍的手动输入那一长串命令时错了很多次~~~
我们直接在项目上右击选择属性 -> 连接器 -> 清单文件,找到附加清单依赖项,填入如下代码(注意这里value用的是单引号,编译后manifest中就是双引号,填坑~~~)
type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'
编译,运行,tooltip出现了,至此问题已经解决。
疑问
本着寻根问底的精神,我们继续探讨为什么添加了这个不知所云的附件清单依赖项之后就可以了呢?
这篇Assembly Manifest详解给了我们答案 https://blog.csdn.net/atlashr/article/details/4395659
经过学习可以知道,是链接库时出现了问题。原来cef使用到了comctl32.dll这个库,然而这个库有两个版本,一个是版本5,一个是版本6,
可以到C:\Windows\WinSxS搜索到。
程序启动后默认是链接到版本5的库,但是我们需要链接到版本6的库,之前添加的附加清单依赖项就是指定程序去链接版本6的comctl32.dll。
至于为什么链接到版本为6的comctl32.dll可以,不知原博主是怎么找到解决方案,感兴趣的可以继续去谷歌。
最后,这算是cef的bug吗? |
|