| 未接受或拒绝过时发起 | 已允许后再发起 | 已拒绝后再发起 | |
| wx.getUserInfo | 弹 | 不弹,直接获取数据 | 弹 |
| wx.getPhoneNumber | 弹 | 弹 | 弹 |
| wx.getLocation | 弹 | 不弹,直接获取数据 | 不弹,无法获取数据,必须引导 wx.getSetting |
其它 scope 会在用到时补充……
“允许后再发起,不弹”的 scope 可在“关于XXX小程序”右上角三点按钮中的“设置”来设置是否允许。
spacedesk 是一款非常强大的虚拟投影软件,可以将其它电脑、苹果设备(iPhone、iPad)、安卓手机甚至 HTML5 浏览器作为第二屏幕。本文以一台笔记本的屏幕作为另一台笔记本的扩展记录安装配置过程。
主笔记本安装 spacedesk DRIVER
扩展笔记本安装 spacedesk VIEWER
为了保证屏幕最佳的显示效果,我们希望两台笔记本最终的显示分辨率与物理分辨率一致。
我的主笔记本分辨率 1920x1080,扩展笔记本分辨率 1366x768
主笔记本
首先在扩展笔记本中打开 spacedesk VIEWER,连接主笔记本。
在主笔记本,桌面右键“显示设置”,分别针对 1 和 2 显示器设置分辨率:


当然还可以在上上图中的“重新排列显示器”中拖动来实现屏幕内容的显示位置。
扩展笔记本
打开 spacedesk VIEWER,在菜单的 Settings 中选择 Resolutions 可设置显示分辨率:


选择 Compression Quality 可设置显示质量:

压缩(Compression)如果选择 Off,那得看你的电脑能否吃得消,否则显示效果会更卡。我的配置是压缩选择 On,颜色深度选择低,快速,质量 100,帧率选择 60 FPS:

这样比默认设置的显示效果要好很多。
如果有条件用有线连接的话,尽量不要用无线连接,能减少不少延时。
【推荐】临时口令和会话口令合二为一的流程(适合随时授权)
前提:
小程序已绑定到微信开放平台。
分两种场景:
场景一:仅需要获取 unionid,且不需要获取头像昵称等用户信息,且已经有很大部分用户仅通过 code2Session 就能获取到 unionid(如:已关注了绑定同一微信开放平台的其它公众号,参 UnionID 机制说明);
场景二:仅需要获取 unionid,或需要获取 unionid 及头像昵称等用户信息,或很大部分用户不能通过 code2Session 获取到 unionid。
场景一步骤:
小程序调用 wx.login(),将 code 发送到开发者服务器
开发者服务器请求微信接口 code2Session,获得 session_key、openid,有机会获得 unionid
若没有返回 unionid,尝试用 openid 从数据库中获取 unionid
如果数据库中没有找到对应的 unionid,告知小程序端使用 button + getUserInfo 的方式请求用户授权
授权允许(判断 detail.errMsg 是否为 getUserInfo:ok)则将加密数据传回开发者服务器进行解密,得到 unionid、头像、昵称等信息,保存到数据库
若授权拒绝,则无动作,用户再次点击 button 会重新弹起授权框
* 该流程仅部分用户的首次使用才要求授权。其它注意事项和流程细节见下方流程图。
场景二步骤:
小程序调用 wx.login(),将 code 发送到开发者服务器
开发者服务器请求微信接口 code2Session,获得 session_key、openid
尝试用 openid 从数据库中获取 unionid 和/或 用户信息
如果数据库中没有找到对应的 unionid 和/或 用户信息,告知小程序端使用 button + getUserInfo 的方式请求用户授权
授权允许(判断 detail.errMsg 是否为 getUserInfo:ok)则将加密数据传回开发者服务器进行解密,得到 unionid、头像、昵称等信息,保存到数据库
若授权拒绝,则无动作,用户再次点击 button 会重新弹起授权框
* 该流程仅每个用户的首次使用才要求授权。其它注意事项和流程细节见下方流程图。
上述两种场景的设计流程,只要数据库中已保存用户的 unionid(和/或 用户信息),都不再需要用户再次授权(即使在“设置”中关闭了“用户信息”授权,点击小程序右上角三点按钮,选择关于小程序,点击右上角的三点,选择设置)。
场景一流程图:

场景二流程图:

流程图中的“临时口令”仅用于关联“通过 code2Session 获得的 session_key”,并在用户授权后带回换取 session_key。原因是 session_key 是机密数据,不允许被传到小程序端。临时口令用完即删(设置表 dt__weapp_code2session 中相应记录的该字段为空)。
【推荐】临时口令和会话口令合二为一的流程(适合随时授权)
如果你是刚入手的小米 WiFi 电力猫,那么按说明书一步一步配置即可。这里记录一下移机的重置方法。
本次移机的场景是电力猫从一台小米路由器更换到另一台小米路由器的配置,两台小米路由器 WIFI 的 SSD 不同(假设为 WIFI-A 和 WIFI-B)。
错误做法:打开米家,切换到 WIFI-B 所在的房间,点击右上角的添加新设备,根据介绍插上子猫,并按子猫的配置键 5 秒以上。连上“xiaomi-plc-xxx”,米家显示正在连接,但到达 100% 后显示连接超时。
可能的错误原因:
没有插上主猫
该电子猫已经在米家上添加过了(在 WIFI-A 所在的房间),就无法添加到其它房间了(仅猜测,未实测)
于是,同时插上主猫和子猫,并且路由器和主猫使用网线连接,什么都不设置,过一两分钟,两猫自动会变成蓝灯(表示连接成功)。这时,如果刚才那步没有重置成功的话,打开米家主界面上的“小米电力线wifi扩展器”(如果没有删除过,还在 A 房间),里面会显示网络名称为 WIFI-A,还可能没有开“WIFI漫游”。这样虽然能连接上网,但有两个 SSD,不能实现漫游。
这时,按子猫配置键 5 秒以上,并静等一分钟以上,变回蓝灯后,再打开米家,就会看到网络名称可能是 WIFI-B-Plus,这时"WIFI漫游”也能打开了,完美扩展了 WIFI。
综上实践得出:
WIFI 是由子猫负责的,所以跟 SSD 有关的配置由子猫负责;
一台设备(这里指电子猫套餐)只能添加到米家一次,但可以更改设备所在的房间。
正确的重置电力猫步骤是:
同时插上主猫和子猫
主猫连上路由器
子猫按配置键 5 秒以上,等待一分钟以上
打开米家,进入“小米电力线wifi扩展器”,打开 WIFI 漫游
以上仅在使用小米路由器情况下实测,非小米路由器未尝试。
在 Godday 上搜索域名,会引导购买一个叫“域名购买服务”的产品(英文版上是人民币 472 元,新加坡简体中文版上的新加坡元换算成人民币更贵),稍不注意就会以为是域名本身,其实是让 Godday 联系域名所有者实现交易的服务费。付款后可设置你希望购买该域名的价格范围。
发现入坑后立刻问度娘,发现好多人跟我一样被坑。
于是按 https://sg.godaddy.com/zh/contact-us 上的 400 电话打过去,客服 MM 说原则上是不退款的哦。后来又得知我没有设置过域名报价,她说可以试试提交一下退款申请。听了十几分钟的音乐后,客服提交完毕,告诉我,如果审批成功,2 天内会收到邮件,15 天内会收到退款。
等了 48 小时没有收到邮件。第 3 天晚上,直接收到退款。
一般地,我们会设置网站中的图片文件仅允许本网站页面调用,或者开放地址栏直接打开,但不允许其它网站调用。
这就需要在 Web 服务器上判断图片的来源(Referer)。
但是,当网站页面是 https,而图片地址是 http 时,考虑到安全性,浏览器将不带 Referer,这时如果图片允许在地址栏直接打开(即 Referer 为空),就起不到防盗链的作用了。
所以图片服务器在处理防盗链时,尽量不要允许 Referer 为空时调用。这时如果要单独允许另一个网站来调用图片,应该使用一致的 protocol。
| 二维码类型 | 可扫码授权的微信号 | 其它微信号 | ||
| 直接扫码 | 将二维码截图发送给可扫码授权的微信号 | 无需劳烦管理员的方式 | ||
| 登录微信公众平台 | 管理员与运营者 | 扫码后需管理员验证登录(管理员通过“公众平台安全助手”接收消息,点开详情后点击“确定”) | 授权人用摄像头扫码①,点击“确定” | 成为运营者② |
| 设置公众号IP白名单 | 管理员与长期运营者 | 无法完成 | 授权人用摄像头扫码①,点击“确定” | 成为长期运营者② |
| 公众号绑定运营者 | 管理员 | 无法完成 | 管理员用摄像头扫码①,点击“确定” | 无 |
小程序添加/删除项目成员 | 管理员 | 无法完成 | 管理员直接识别二维码,点击“确定” | 无 |
| 小程序修改名称、修改简称、修改登录邮箱、修改密码 | 管理员 | 无法完成 | “修改简称”管理员用摄像头扫码①,点击“确定”,其它未测 | 无 |
| 小程序修改业务域名 | 管理员、有“开发者”权限的项目成员 | 无法完成 | 授权人直接识别二维码,点击“确定” | 成为有“开发者”权限的项目成员 |
| 微信开放平台绑定小程序 | 管理员 | 无法完成 | 管理员用摄像头扫码①,点击“确定” | 无 |
① 摄像头扫码:无法直接用“识别二维码”,必须把二维码发送到身边的其它设备,再使用手机摄像头完成扫码。
② 成为运营者要求绑定银行卡;成为运营者将占用“微信号绑定的帐号”数量,详见说明。若达到上限,只有法定代表人可继续成为运营者。在公众号“公众平台安全助手”中可查询绑定的帐号。
另外:
小程序添加/删除体验成员无须管理员授权
如果管理员未关注公众号“公众平台安全助手”,待测……
这是一个数据可视化项目,基于D3.js。能够将历史数据排名转化为动态柱状图图表。
先来看看效果:
https://xoyozo.net/Demo/BarGraph
作者 Jannchie 见齐还提供了官方视频教程:
https://www.bilibili.com/video/av28087807
不过由于开源项目的不断更新,该教程的部分内容已失效,本文针对 2018-12-25 版本总结了一些常用的配置说明,仅供参考。
从 GitHub 下载源代码,在 src 目录中可以看到 4 个文件:
bargraph.html --> 运行示例页面
config.js --> 配置文件
stylesheet.css --> 样式表
visual.js --> 核心文件
作者并没有将代码封装为插件的方式,所以我们是通过修改 config.js 配置文件的方式应用到自己的项目中的。
visual.js 虽然是核心文件,但作者将部分示例中的代码也包含其中,但并不影响我们直接在自己的项目中引用。
以下是 config.js 中的主要属性:
| 属性 | 说明 | 参考值 |
| encoding | 数据源(csv、json)等的文件编码 | GBK / UTF-8 等 |
| max_number | 每个时间节点最多显示的条目数 | 10 |
| showMessage | 控制是否显示顶部附加信息文字 | true / false |
| auto_sort | 时间自动排序(详细含义、作用及限制见代码中注释) | true / false |
| timeFormat | 时间格式,显示于图表右下角的时间 | %Y、%Y-%M-%D 等 |
| reverse | 是否倒序 | true / false |
| divide_by | 类型根据什么字段区分?如果是 name,则关闭类型显示 | |
| divide_color_by | 颜色根据什么字段区分? 须要注意的是,如果配置成 name,则各条颜色不同(因为 name 值各异),如果配置成 type 等,那么相同 type 值的条颜色相同。 | 字段名 |
| color | 指定部分或所有条的颜色,该项与 divide_color_by 设置有关。 | 以 divide_color_by = 'name' 为例,"中国"是其中的一项 name 值,那么该项将显示 #D62728 色: color: { '中国': '#D62728' } |
| changeable_color | 若 true 则颜色的深浅将根据数据的增长率实时改变 | |
| itemLabel | 左边文字 | |
| typeLabel | 右边文字 | |
| item_x | ||
| interval_time | 时间点间隔时间 | 2 |
| text_y | ||
| text_x | ||
| offset | ||
| display_barInfo | 如果希望不显示,则可以设置较大的值,单位像素 | |
| use_counter | ||
| step | ||
| format | 格式化数值 | |
| left_margin | ||
| right_margin | ||
| top_margin | ||
| bottom_margin | ||
| dateLabel_x | ||
| dateLabel_y | ||
| allow_up | ||
| enter_from_0 | ||
| big_value | ||
| use_semilogarithmic_coordinate | ||
| long | ||
| wait | 数据加载完成后开始播放前的等待时间 | 0 |
| update_rate |
当我们用 ASP.NET Web API 作服务端接口时,如果客户端以 GET 方式请求的 URL 中,由于拼接错误导致“?”和“&”并列出现,会发生 400 Bad Request,那么需要在 IIS 中使用 URL 重写模块来纠正。
请求 URL 如:
http://www.abc.com/api/obj?&foo=bar
需要重写为:
http://www.abc.com/api/obj?foo=bar
打开 IIS 管理器中对应网站的 URL 重写,

添加空白规则。
匹配的 URL 不包含域名,如上述 URL 则匹配的范围是:
api/obj
不包含我们要查找的字符串 ?&,所以此处模式只能匹配所有:
.*
又因为重定向路径中需要包含这部分,所以用括号包裹,即:
(.*)

继续添加条件匹配:
条件输入:{QUERY_STRING},表示匹配查询字符串,
匹配的部分是“?”后面的字符串:
&foo=bar
那么可以填写模式:
^\&.*
因为 & 后面的部分仍然需要使用,所以用括号包裹:
^\&(.*)

“操作”中选择类型“重定向”,URL 填写:
{R:1}?{C:1}
其中 {R:1} 指代 api/obj,{C:1} 指代 foo=bar
取消“附加查询字符串”前面的勾
重定向类型在测试时可以选择 302 或 307,没问题后选择 301。

完成。
最终我们可以在网站的配置文件 web.config 中看到:
<rewrite>
<rules>
<rule name="uni-app-h5-replace-q" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{QUERY_STRING}" pattern="^\&(.*)" />
</conditions>
<action type="Redirect" url="{R:1}?{C:1}" appendQueryString="false" redirectType="Temporary" />
</rule>
</rules>
</rewrite>我们要把这段代码复制到开发环境源代码的 web.config 中,以免发布网站时将我们设置好的配置覆盖掉。
Access to XMLHttpRequest at '********' from origin '********' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
如果仅仅是在开发环境调试,可以安装 Chrome 插件;
也可以在 PHP、ASP.NET 等后端语言中设置 header;
当然还可以在 Web 服务器上设置,如在 IIS 中:
点击“IIS 响应标头”,添加 Access-Control-Allow-Origin
总之,是在资源端设置是否允许跨域访问。
譬如使用网页播放器播放阿里云直播流时,需要在阿里云视频点播控制台-域名管理-HTTP头配置 中设置。
更多信息: