electron开发,文件无法拖放到渲染窗口的一种奇怪情况,附原因和解决方案

这两天又遇到一个奇怪情况,按理来说,electron应该是能支持几乎所有HTML5页面特性的,但是网页中常见的文件拖拽上传,也就是HTML5中的drop相关事件,封装到electron程序后,无法被触发执行。

下图就是这种奇怪的现象。

翻阅了大量资料,发现其他开发者可能都没遇到过这种情况,几乎搜不到同类问题。

如果确定html5代码没问题的话,那可能就是electron创建的窗口问题,但是翻阅electron官方文档,也没有看到相关介绍。

既然官方没提到拒绝文件拖拽到窗体,那大概率肯定就是能支持的,毕竟如果和正常HTML5特性冲突的话,一定会有说明,更何况这也算是一种常规需求了。

至此,一切明了,用普通powershell终端再次启动程序,效果就正常了。

最后,附上核心代码:

<!-- index.html -->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Hello World!</title>
    <meta
      http-equiv="Content-Security-Policy"
      content="script-src 'self' 'unsafe-inline';"
    />
  </head>
  <body>
    <div class="content" id="content">文件拖到这个ID="content"的div里</div>

    <style>
      #content {
        margin: 0 auto;
        width: 96%;
        height: 200px;
        background-color: rgba(0, 0, 0, 0.02);
        border-radius: 10px;
        border: 3px dotted rgba(0, 0, 0, 0.3);
        display: flex;
        justify-content: center;
        align-items: center;
      }
    </style>

    <script src="renderer.js"></script>
  </body>
</html>
// renderer.js
document.getElementById("content").addEventListener("drop", (e) => {
  e.preventDefault();
  e.stopPropagation();
  for (const f of e.dataTransfer.files) {
    console.log("File(s) you dragged here: ", f.path);
  }
});
document.getElementById("content").addEventListener("dragover", (e) => {
  e.preventDefault();
  e.stopPropagation();
});
关于博主
骨灰级博客玩家
国内第一批90后网站站长/程序员
做过七年前端讲师
目前从事锦鲤观赏鱼电商行业
鱼贝贝锦鲤创始人
文章列表
1
老孙谈“师德”-最近一些热点事件引发的思考
老孙谈“师德”-最近一些热点事件引发的思考
2
程序员听诊加班法,果然是人才!
程序员听诊加班法,果然是人才!
3
群晖(Synology)NAS服务器硬盘莫名丢失存储空间的解决方法
群晖(Synology)NAS服务器硬盘莫名丢失存储空间的解决方法
4
Adobe系列软件安装时提示“安装失败 安装遇到错误”的解决方法
Adobe系列软件安装时提示“安装失败 安装遇到错误”的解决方法
5
IE浏览器6 7 8  9的css hack详解
IE浏览器6 7 8 9的css hack详解
最新评论
比比拉布
比比拉布
5月7日
太感谢了!!!!!!找了这么多的教程,只有你点出来了关键点——设计视图!!!!
Jake
Jake
3月7日
Halo 啊~麻烦更新下我的博客地址,原名:Jing Blog。麻烦更新如下: Jake Blog(后缀可以省略,也可以保留,看哪个风格适合) 网址:htt
评论于关于博主