在钉钉小程序入门1—区分企业内部应用、第三方企业应用、第三方个人应用一文中我解释了钉钉的三种应用以及它们的区别,以企业内部应用为例,点击创建应用按钮后会弹出了如下的弹窗:

这里有一个应用类型:H5微应用和小程序,很多小伙伴不知道这二者有什么区别,下面我来给大家介绍一下。
小程序主页面

H5微应用主页面

从左侧菜单可以看出:在基础信息菜单下小程序比H5微应用多一个人员管理;在安全与监控菜单下小程序比H5微应用多一个安全中心。
在解释这两个菜单有什么作用之前,大家需要了解一下小程序与H5的一些基本概念:
1. 不一样的运行环境
H5仅能借助浏览器实现启动,但小程序虽然包含H5技术,但在运行环境方面与H5不同,它基于解析器得以运行,结合自定义的开发语言标准,其性能更是有了长足的进步。简单讲小伙伴们可以利用浏览器打开H5网页,运用微信、钉钉、支付宝平台打开小程序。2. 不一样的成本
在开发方面,很多企业借助各类开发软件针对H5开发,定制化出众。但这种开发需要结合多方面技术实现,因此相对比较复杂,开发的成本也是比较高的。然而小程序则不一样,开发完全借助官方下载的开发工具即可实现,小程序开发价格相对低廉很多。3. 不一样的系统权限
从程序本身来看,这个小程序能得到更多的系统权限,而对于H5则不同,权限很低。很简单举几个例子,比如网络当前的状态,甚至是一些数据的缓存应用等,都能够得以与小程序进行连接。4. 不一样的运行状态
现在的人们总是强调人性化,用户高体验度,那么这一点就被小程序抢先拥有了。要知道,相较于H5,这个小程序拥有更为流畅的使用速度。5. 不一样的开发方式
小程序的开发都需要借助于专门的开发工具,如微信小程序需要微信开发者工具,钉钉也需要小程序开发者工具。而H5不同,可以使用VsCode、HBuilder开发。
很多使用过小程序和H5的用户,都很印象深刻,前者的打开速度要快上很多,利用一些软件就也可以测试出两者的差距。
所以小程序多出来的人员管理管的就是开发工具的权限,只有在人员管理中添加了的用户才能在小程序开发工具中找到这个小程序。多出来的安全中心则是小程序容器外跳链接时做的一个网址备案管理,防止被钓鱼网站利用。
小程序开发管理

H5微应用开发管理

在开发管理中,H5微应用比小程序多一个应用首页地址,这个地址相当于网站的首页地址,H5微应用是必须配置这个地址的,不配置的话小程序是无法打开的。
由于H5微应用没有运行在钉钉容器中,可能没法通过api拿不到当前组织的CorpId,而CorpId又是动态的,所以H5微应用的链接我一般配置成如下格式:

这样我们在打开H5微应用时,钉钉就会自动把当前这个组织的CorpId替换到链接上去,前端同学就可以通过参数拿到CorpId了。
而小程序就没有这样的问题了,直接调用原生api即可获取当前组织的CorpId。
H5微应用可以理解为就是一个网页,只不过是做成小程序的样子,它的跳转完全不受容器控制,除非自己写代码控制跳转,否则都不会进行拦截。
而小程序不是这样,钉钉小程序的安全中心如下:

你想跳转的任何一个非当前域名的页面都需要在这里维护,有些光配置还不行还得进行安全校验,例如微信的业务域名就非常的恶心,必须去域名下面放一个文件,否则就无法配置。
小程序分为开发版—体验版—线上版,其中体验版发布到线上版需要官方审核,有时还有可能审核不通过。
而H5微应用只需要后台维护一下js、css的版本号即可,遇到bug只需要改完代码发布一下就行了。
在版本管理这块H5完胜小程序。
钉钉是分为PC端和移动端的,在PC端打不开小程序,点击会显示“该应用仅支持移动端打开”,则H5微应用都可以打开。
小程序打开是不可以放大全屏的,宽高都被限制了,而H5微应用打开后会有一个放大按钮,点击可以全屏,利用这个特点可以适配平板和PC端都行。
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在