- 博客(602)
- 资源 (3)
- 收藏
- 关注
原创 2020.9.23日报:终于把chromium84支持npapi了
搞了两个多星期,踩了无数大坑以后,终于把chromium84支持npapi了。chromium很坑爹的把共享内存映射的base类删了,然后插件进程发送网络请求也变的超级复杂。很是坑爹。不过通过这么一搞,倒是又对chromium熟悉不少。...
2020-09-23 00:48:40 1527 2
原创 最新版chromium 76如何支持xp
我知道,当我写下这个标题的时候,肯定一大波人会过来嘲讽:都什么年代了,还XP?道理我都懂,但据我咨询了腾讯同事一些内部数据,XP在中国依然百之十几个点的占有率。里面最多的就是政企单位。这些电脑配置不好,比较古老了,而且关键是很多配套的软件只有xp版本。让他们升级系统?想法很好,但谁出钱找那些配套工具的厂商呢,更何况很多年久失修的软件的厂商可能早就倒闭不见了,人都找不到。哈哈,其实我说了这...
2019-07-10 15:24:33 4268 5
原创 miniblink API文档
新文档地址:https://weolar.github.io/miniblink/doc-main.htm
2018-05-26 00:55:56 15815 7
原创 Cef经典N大问题
1、cef启动、退出的时候怎么崩溃了答:如果是启动时崩溃,请看资源目录是否文件都齐全.退出的话见https://github.com/fanfeilong/cefutil/blob/master/doc/CEF_Close.md如果是centos6.4 内核上跑CEF启动时候崩溃,原因是不支持一个uid有关的东西。启动时增加参数--disable-setuid-sandbox就OK了2、...
2016-11-25 17:35:33 26636 10
原创 炫酷的miniblink demo已上传,基于bracket
因为最近这些版本不是太稳定,加上又从Webkit里挪了一些功能,所以就不说盛大发布了,先放个试玩版,然后每天迭代开发,争取早日稳定。用法:可以跑cefclient,也可以改名成wke.dll,然后丢到你们的wke的工程里去跑跑
2016-05-18 21:48:07 21053 8
原创 miniblink 的bug收集帖子
应广大网友的热情反馈,只好提前把miniblink 0.0.1 版放出来,果然一堆小问题。特此开个贴子收集下bug,以及解决情况
2016-05-14 21:02:30 2772 13
原创 electron主进程的nodejs消息循环是如何驱动的
很简单,有个NodeBindings::EmbedThreadRunner的函数,是在主进程的工作线程运行。这个函数会监听uv_loop_->iocp有没事件,如果有的话,就发消息给主线程,让主线程调用NodeBindings::UvRunOnce,里面就是调用libuv,然后驱动nodejs。那如果nodejs是开了定时器呢?在监听uv_loop_->iocp的时候会有个超时,超时的时间就是定时器的间隔。
2024-08-31 09:11:33 200
原创 chromium linux版本编译时,函数指针的汇编代码出问题
研究了几天,最后发现可能是clang的bug。触发的条件是要开启-fsanitize=cfi-icall优化。这个可以在chromium的编译参数里用is_official_build=true打开。这几天编译了chromium的linux版本,但加了几句很简单的用函数指针调用某个so的代码后,一跑就崩溃。看了下这块代码编译出来的汇编,很奇怪,像乱码一样,完全不是正常的汇编。目前暂时不清楚是不是我用的这个版本的clang导致的。
2024-08-11 15:01:28 128
原创 日报240624:禁用chromium里的[chromium-rawptr] 报错
RAW_PTR_EXCLUSION 可以禁用error : [chromium-rawptr] Use raw_ptr<T> instead of a raw pointer.加在字段前面就行,,比如。
2024-06-24 21:54:03 231
原创 chromium添加一个书签项,并自动显示图标
chromium把这块写的很复杂,其实真正的原因是chromium是要做成操作系统的,所以对各种icon有个统一的管理。而favicon的获取,需要打开网页,进行解析。麻烦的是怎么设置完书签以后还要显示这个书签对应的网址的favicon。这个涉及到chromium的icon管理。
2024-05-07 15:30:22 415 1
原创 Chromium 通过IDL方式添加扩展API,并且在普通网页也可以调用
到src\extensions\renderer\native_extension_bindings_system.cc \src\extensions\renderer\script_context.cc这里面加这两句。js测试案例:chrome.gclxry.hello("hello world", function(state) {alert(state)});里提到的方式,加入扩展api。普通网页就能调用到gclxry.hello了。这个gclxry改成你们的api名字就行了。
2024-03-26 20:25:51 442
原创 chrome实现IE模式的一个小细节
把ie窗口贴在chrome的主窗口上面时,会发现ie显示黑屏。就能让ie显示出来了。猜测是ie的gpu加速和chrome的有冲突。
2024-03-19 00:01:02 489
原创 修复编译arm程序,找不到一些neon的基础类型例如 ‘__Int8x8_t‘等错误
现在我是用"C:/Microsoft/AndroidNDK64/android-ndk-r16b/toolchains/llvm/prebuilt/windows-x86_64/lib64/clang/5.0/include"里的头文件。要把这个目录的搜索顺序放到前面,不然别的目录里的arm_neon.h可能就替代这个目录下的arm_neon.h了。见:https://www.cnblogs.com/Forwarderz/p/12656058.html。
2023-12-02 23:54:17 630
原创 XP、windows2003下提示找不到SetProcessDEPPolicy
SetProcessDEPPolicy和Sleep参数个数一样,而且SetProcessDEPPolicy的参数值一般也就是0或者1,我给强制传给Sleep,完全不影响exe的流程。哈哈,这办法真是天才。查了下electron和chromium的代码都没用到这个api,那应该就是crt编译的时候带进去的,可能是exe启动时候调用了一下。我直接搜索exe里的SetProcessDEPPolicy字符串,然后强制改成Sleep。
2023-06-03 12:22:53 266
原创 23.5.29日报:修复mini-electron一处v8使用不当的错误
单是一句 resolve(result);但这里有个小问题,就是 resolve(result);对于一个promise来说,调用了多次,v8会报告异常,这个异常被存到isolata里去,然后在console.log的时候出现断言错误。此时不知道为啥,偶尔会在v8的ConsoleCall里报错:CHECK(!修复方式很简单,把ipcRenderer.once改为ipcRenderer.on就行了。这句导致v8里报错了。
2023-05-29 23:12:46 389
原创 23.5.20:过pixelscan.net的一些技巧
里的canvas指纹,有2d和3d的。2d的会生成一个带文字和不带文字的。不带文字的不要加干扰,不然会被检测到。也要注意不要加干扰。
2023-05-20 18:52:08 415 1
原创 23.4.25日报:vs对多继承的析构函数处理有bug
这样写,会报错:error C2385: 对“delete”的访问不明确, note: 此诊断出现在编译器生成的函数“void *HeapVector::__delDtor(unsigned int)”中。这两写法按理说是等价的,在clang中也都能编译通过。但看起来第一种写法,vs默认会生成一个__delDtor,里面好像和delete有关系。其实这个bug是我在用vs编译blink时候发现的。查了下,好像是vs的bug。有人提过,不过微软没人修复。而第二种写法就没问题了,这就很神奇了。
2023-04-25 00:46:39 126
原创 23.2.7日报:编译chromium提示cannot create a temporary file
编译chromium提示cannot create a temporary file
2023-02-07 08:16:28 276
原创 2022.6.9日报:正确处理webbrowser控件的键盘消息
webbrowser控件无法响应百度首页那个下拉框。网上查了下,说是要在消息循环里响应IOleInPlaceActiveObject::TranslateAccelerator照做了以后,发现某些网页的textarea,例如Javascript在线解压缩 - 在线工具按向下键,光标会下移动两行…于是我用SetWindowLongPtr,hook了ie的窗口消息响应函数,然后把WM_KEYDOWN给禁用了。这样做了以后,光标确实不会移动两行,但向...
2022-06-09 11:56:12 216
原创 2022.6.7日报:quickjs版miniblink逐步完善
1,给quickjs增加一个JS_CloneValue的api。这是为了模仿v8里面用到很多的v8::Object::Clone一开始,我是直接用JS_CopyDataProperties,但发现这个不会拷贝我设置了各种setter、getter之类的。所以我就再加一个JS_CloneDataProperties,通过遍历JSObject::shape来实现。2,给quickjs增加index callback。这是对应v8里的IndexedPropertyHandlerConfiguration操作。在b
2022-06-07 10:54:36 405
原创 2022.5.16日报:mb的打印机问题
1,最近发现,有的打印机比较奇葩,他那个physicalSizeDeviceUnits比printableAreaDeviceUnits要打一些。也就是物理打印区域比可打印区域大一些。这时候,传递给pdfium生成的dc需要调整一下,pdf的大小要适配可打印区域。一般是伸缩到可打印区域,或者干脆生成的时候安装可打印区域大小生成。...
2022-05-16 12:28:21 183
原创 2022.4.26:chrome100支持xp,堆栈大小问题
1,新版本v8确实恐怖,一上来就需要大堆栈,至少4M起步。动态申请大堆栈的地方,是chrome\app\chrome_exe_main_win.cc的入口里。这里用到了技巧,就是用ConvertThreadToFiberEx可以申请大内存。在v8的StackGuard::ThreadLocal::Initialize( ParseInfo::SetPerThreadState)里,会直接用当前堆栈地址GetCurrentStackPosition减去一个常量值,就成了堆栈溢出的检测值。(题外话,
2022-04-26 16:03:45 646 1
原创 2022.4.8日报:修复URLSearchParams崩溃
测试代码:const a = Object.create(null);var xx = new URLSearchParams(a);const n = xx.toString();崩溃原因是这个URLSearchParams是我从57版本弄回来的。49是没实现这个接口的。而57版本的constructor回调,判断传入参数无法字符串化后,是直接返回的。此时抛异常的时机是在ExceptionState的析构函数里。而49版本抛异常是要手动调用exceptionState.throwIfNeede
2022-04-08 23:40:11 283
原创 2022.3.23日报:_open_osfhandle、_get_osfhandle不能跨模块调用(调试ASAR功能里发现的)
1,今天在修改一个mini-electron的bug,就是mini-electron加载asar有时候提示文件UV_EBADF。原因是asar的Archive::Archive函数,会调用_open_osfhandle获取fd,然后传到nodejs的static void Read(const FunctionCallbackInfo<Value>& args)里,再用_get_osfhandle获取fd对应的windows句柄。然而这里有个问题,就是_open_osfh
2022-03-23 11:00:19 360
原创 2022.2.20日报:过年这几周研究了electron和linux
1,electron方面,重点研究了那个node隔离机制。其实就是const mainWindow = new BrowserWindow({ webPreferences: { contextIsolation: true }})这个其实就是利用chromium里很早很早就有的context隔离机制。早在chromium30几版本的时候,chromium为了让extension可以操作dom,又不希望污染dom的context,就搞出了隔离机制。具体来说,其实非常简单。
2022-02-20 22:30:56 980
原创 2022.1.9日报:修复input placeholder导致位置不准的问题
1,测试代码如下:<html lang="en"> <head> <meta charset="UTF-8"> <title>新建标签页</title> <link href="css/chunk-vendors.c98dfc91.css" rel="stylesheet"> <link href="css/browser.6f94aa46.css" rel="stylesheet
2022-01-09 10:57:18 867
原创 2022.1.6日报:增强browerview
1,继续完善mini-electron的browserview功能。2,v875版本遇到了一个bug,不知道是不是这个版本独有的。就是ant design这库(官网可重现这个bug),在装饰器装饰lazyUpdataPosition的时候用到了Object.getOwnPropertyDescriptor的返回值有问题。第一次是错的,第二次才对。3,修复pdf保存、打印时候的一些崩溃...
2022-01-06 10:05:19 819
原创 2021.12.29日报:重新开始撸mini-electron
1,mini-electron增加browserview控件2,增加audio context3,pdf样式美化
2021-12-29 11:25:53 1606 1
原创 2021.12.12日报:非ComplexPath下,skia显示黑体字有问题
测试代码是这样:<FONT style="FONT-SIZE: 12pt" face="黑体"><STRONG><SPAN> </SPAN></STRONG></FONT><br/>然后如果不开启ComplexPath,skia会显示空格变成一个方框,不知道是不是skia的bug。跟了一下,主要是Font::buildGlyphBuffer这里建立的glyph和ComplexPath不同。..
2021-12-12 18:31:44 795
原创 2021.12.9日报:v875的gc机制小结
最近被v875的gc搞蒙了。做个总结。1,v8::Persistent<T>的机制改了。如果用SetWeak设置了回收回调,那么如果在UnifiedHeapController::AdvanceTracing里不RegisterEmbedderReference的话,js如果也没引用,就会触发这个回收回调。57好像不会有这问题。这个变动,导致了一系列问题。例如document.getElementById("test").addEventListener这种方式添加的监听器,就直接被回收
2021-12-09 12:03:43 1248
原创 2021.11.6日报:跟进v8 的gc流程的一些笔记
1,v875的v8::PersistentHandleVisitor是可以把句柄全遍历出来的,但要想保持这些句柄长久不被gc回收,要在v8::EmbedderHeapTracer的AdvanceTracing里调用tracer->RegisterEmbedderReference。在v8::PersistentHandleVisitor里调用RegisterEmbedderReference是无效的。这个我研究了很久v8才知道。2,v8::EmbedderHeapTracer::RegisterV
2021-11-06 15:12:16 823
原创 2021.11.1日报,mb57切换到v875版本。
1,研究用vs编译v875的时候遇到了两个小问题。新版本v8,基本上没考虑过vs来编译。现在遇到了:(1)v8有部分代码是py预编译生成的。而在编译x86和x64的时候,居然这个预编译的代码还稍微有点不一样。具体是在gen\v8\torque-generated\builtins-array-from-dsl-gen.ccgen\v8\torque-generated\builtins-base-from-dsl-gen.ccgen\v8\torque-generated\built
2021-11-01 09:29:13 464
原创 2021.10.9日报:修复mb57的devtools问题
1,可以调用并获取flash npapi的返回值。之前没获取到,是因为_NPN_EVAL_xxx函数没实现完整。flash会在这里把_flash_temp_ = '111' 3之类的脚本,
2021-10-09 23:17:34 156 1
原创 2021.8.18日报:让v8忽略js的脚本错误继续执行
1,修复cssText获取节点的值不对的问题。原因是E:\mycode\minichrome53\third_party\WebKit\Source\build\scripts\make_css_property_names.py这里面我上次
2021-08-18 21:03:09 279
原创 2021.8.11日报:让v8跳过各种错误
1、现在碰到一个蛋疼的需求,就是有很多沙雕网页,js代码写的非常飘逸。而某些环境下,浏览器又必须得忽略这些错误。举个例子:var commonCookie = undefined;commonCookie.getCookie("userToken");console.log('finish');这种代码,必须得跳过前面的js错误,执行到console.log('finish');其他的js错误还有很多。除了运行时错误,还有编译错误。研究了一番后,我发现没有通用的解决方案。我是一.
2021-08-11 17:43:19 408
miniblink浏览器控件
2019-02-13
超强英语造句机
2007-04-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人