如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接信息。

electron名义上是基于Chromium的,但是如果你把完全理解为网页技术的话,那就也许大错特错了。前边有electron和jquery不得不说的故事,本文就有electron与prompt不得不说的故事。prompt作为一个非常基础(虽然不常用)的网页对话框,但是electron不支持prompt的话,还是有些说不过去的。但是,故事就这么展开了。

alert/confirm/prompt的基本情况

alert/confirm/prompt这个可以说是网页最原始的对话框三剑客了,如果大家学习网页技术的话,估计这三个对话框都是最开始要学习的必备技能吧?不过,这其中的prompt对话框,居然不被electron所支持。

关于对三者的支持情况,苏南大叔做了如下测试。注意:下面的代码是运行在electron之内的渲染进程index.html中的。

alert("Electron支持alert")
confirm("Electron支持confirm");
prompt("Electron不支持prompt");

electron不支持prompt对话框怎么办? - 001_alert

electron不支持prompt对话框怎么办?(图6-1)

electron不支持prompt对话框怎么办? - 002_confirm

electron不支持prompt对话框怎么办?(图6-2)

electron不支持prompt对话框怎么办? - 003_prompt

electron不支持prompt对话框怎么办?(图6-3)

正常的prompt对话框

对于正常的网页来说,prompt是显示成下面这样的。下图的截图是在chrome里面的截图,本文的目标也是努力在electron中模拟出这样的效果。

electron不支持prompt对话框怎么办? - promot_正常

electron不支持prompt对话框怎么办?(图6-4)

var name=prompt("请输入您的姓名");
if(name!="" && !(name===null) && (name!="null")){
alert("欢迎您"+name);
}

苏南大叔在最新版的chrome上测试的时候,点击取消的返回值居然不是null对象,而是null字符串。所以才会由上面的代码,个人表示,不可思议。返回值是null字符串的话,就不能区分出这个行为是用户输入了null,然后点击确定产生的。还是点击取消按钮产生的。也许,这个是chrome浏览器的bug吧。

解决方案预览

鉴于上述两点理由,苏南大叔建议大家日常代码中,使用模拟的对话框,来完成相关逻辑,好处就是:逻辑可控还可定义样式。这样的话,我们就可以利用一些开源的对话框美化代码了,比如:smalltalk/sweetalert2/artDialog等等开源代码。

这些代码的可控性都非常好,但是,他们的一个共同问题就是返回值的获取方式,因为传统的返回值是类似下面的这种返回的。var ret=promot('')。在这里,页面js逻辑会等待对话框返回数据。但是,各种模拟对话框代码,都是用div模拟的层,并不会阻塞进程,也就是说,用上述等待函数返回值的办法,是会出现逻辑错误的。

这些开源代码一般都是用两种方案做返回值逻辑,一个是callback,一个是promise。当然逻辑是可用的,不过对于一个现成已有的代码逻辑来说,修改量还是蛮大的。当然,在这里,不得不承认,这样的变化应该是js的发展趋势。历史的进步,无法阻挡。

这里的解决方案,其实应该蛮多的,上面列出的三个开源,是苏南大叔用过,并且觉得还不错的方案。当然,您可以有您自己的答案,这个不一而足。

electron中的源码截图

颤抖吧,骚年。electron是不打算支持prompt了,您就痛苦的放弃吧~ 面对现实就是最正确的选择。

https://github.com/electron/electron/blob/50bfe9e335279491706c5c4ab13e53bc9c0bcdae/atom/renderer/lib/override.coffee#L77-L95

electron不支持prompt对话框怎么办? - electron

electron不支持prompt对话框怎么办?(图6-5)

https://github.com/electron/electron/blob/e73326a324b3e6998bad1517b98193be989b28ee/lib/renderer/window-setup.js

electron不支持prompt对话框怎么办? - electron2

electron不支持prompt对话框怎么办?(图6-6)

结论

苏南大叔看了看electron官方的issue,感觉promptelectron中复生的概率太渺茫了。不过,prompt这个对话框组件,确实使用率很低,而且有更好的替代方案,不支持就不支持吧,也没有什么好悲哀的。对吧?哈哈~

更多electron的经验文章,请点击这里查看:https://newsn.net/tag/electron/

  【electron】秘籍文章入口,仅传授于有缘之人  electron

欢迎转载传播本篇原创文章,转载请保留链接及作者信息。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

打赏领取小礼物

打赏任意金额,发送截图到邮箱 shang@newsn.net ,可以领取精选回馈如下(任选其一):
  • 《前端视频教程大礼包》一套
  • 《wordpress精选皮肤》一套
  • 《dedecms织梦精选模板》一套
感谢您的打赏,让我更有动力,将更多精彩教程文章,呈现给大家!谢谢!

岁月静好

关注互联网发展,关注苏南大叔的《程序如此灵动~》博客
本文章来自:程序如此灵动~
博客地址为:https://newsn.net/
原文地址为:https://newsn.net/say/electron-prompt.html
上一篇好文:electron如何集成绿色版flash插件?跨平台终极版
下一篇好文:如何利用smalltalk弥补electron不支持prompt的问题

如果您转载了本文章,出于某种原因,并没有注明作者或者出处。
在这里,苏南大叔也表示理解和支持。因为苏南大叔深深地明白:
您会在合适的时机,合适的地方,给本博客一个外链。对吧?
您若开心,便是安好!岁月静好,但愿世界和平,没有纷争~