近期项目要用electron中做一个拖放文件上传的功能,早前试验过是没有问题的,但是昨天出现了一个诡异的现象:从文件管理器拖文件进来后,鼠标图案变成禁止的标志,松开后也没有触发drop事件。
搜索了一番解决办法,很多人在讲preventDefault的问题。很显然不是一回事情,事件完全没有触发,哪里有default可以prevent啊。。。
尝试重建项目试试drop事件也没有成功,这个就很诡异了。。
又尝试在mac上建工程,发现drop事件可以触发,可问题是早前试验成功的时候是在windows上搞定的。。
思索了一下人生之后又开始搜索之路。
找到问题根源如下:
https://github.com/electron/electron/issues/2329
这个哥说在拖动的时候遇到一个icon不允许他拖放,他发现他是在用管理员模式运行npm的时候才会有这个问题,如果他不用管理员模式,就可以正常拖拽!(看来还真的是windows的坑)
接下来这个链接,说明了windows的安全机制导致无法拖拽的问题
UAC(从vista开始就存在)会将windows的不同进程分成不同的权限级别,Explorer(文件管理器)正常是运行在MIC级别,一般情况下electron的程序也是运行在MIC级别,文件拖拽可以发生在同一级别之间,或者从高级别-->拖到-->低级别的进程。但如果你是是用管理员权限运行你的electron程序,那么文件拖拽就会被禁止,因为文件管理器的级别没有你管理员级别高。
解决办法就是不要用管理员权限调试/运行electron应用。