我在真机调试下,调试小程序Canvas,一直无法绘制,我以为是Echarts不兼容导致的。
实际上,这TMD的是微信开发者工具的问题,真机和模拟器都没问题。
微信小程序,任何涉及到原生组件的调试一定要在真机上调试!Android和IOS都试一遍,不然就是大坑!!!
我在真机调试下,调试小程序Canvas,一直无法绘制,我以为是Echarts不兼容导致的。
实际上,这TMD的是微信开发者工具的问题,真机和模拟器都没问题。
Electron 其实提供的跨平台的通用开机自启动支持。
但是因为Windows系统的限制,如果您的Electron在运行时要使用管理员权限的话,这样设置的自启动会失效。
目前解决方法有两种,一种是服务,另一种是写注册表启动项
服务的方案,优点就是,在启动的时候不会弹出UAC,缺点是,需要额外的精力来维护这个服务支持组件。
所以,个人比较推荐使用写注册表的方式
缺点就是开机会弹UAC~ 不过无伤大雅
/reg:32
let cp = require('child_process');
// 获取可执行文件位置
const ex=process.execPath;
// 定义事件,渲染进程中直接使用
// 开启 开机自启动
ipcMain.on('openAutoStart',()=>{
console.log('updateExe',ex)
// 注释的是electron官方提供的自启方法
// app.setLoginItemSettings({
// openAtLogin: true,//是否自启
// openAsHidden:false,//启动后是否显示窗体
// path: ex,//启动路径
// args: [] //启动时的参数
// });
cp.exec(`REG ADD HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run /v 软件名 /t REG_SZ /d "${ex}" /f`,function(err){
console.log(err);
});
});
// 关闭 开机自启动
ipcMain.on('closeAutoStart',()=>{
// 注释的是electron官方提供的自启方法
// app.setLoginItemSettings({
// openAtLogin: false,//是否自启
// openAsHidden:false,//启动后是否显示窗体
// path: ex,//启动路径
// args: [] //启动时的参数
// });
cp.exec("REG DELETE HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v 软件名 /f",function(err){
console.log(err);
});
})
//检查注册表项是否存在
ipcMain.handle('checkAutoStart',async ()=>{
return await new Promise((resolve, reject)=>{
cp.exec("REG QUERY HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v 软件名",function(err,stdout,stderr){
resolve(stdout);
console.log(stderr);
console.log(err);
});
})
})
REG /?
命令查看 Electron 实现部分窗体挂代理来方便调试
在需要挂代理的窗体中添加下面的代码:
await OAuth.webContents.session.setProxy({
//代理地址,可用Http/Socks协议
proxyRules:"http://127.0.0.1:1080",
//代理排除的域名/地址
proxyBypassRules:'www.idzd.top'
});
上两篇文章说了,如何在Web端实现Google/Facebook的第三方登录。
这就简单说下 Electron 实现第三方登录。
其实,整个流程中与Web版本最大区别就是,如何获取回调的参数。
//注册监听事件
OAuth.webContents.on('did-navigate', (event, url) => {
let raw_code = /access_token=([^&]*)/.exec(url) || null;
let access_token = (raw_code && raw_code.length > 1) ? raw_code[1] : null;
let raw_state = /state=([^&]*)/.exec(url) || null;
let state = (raw_state && raw_state.length > 1) ? raw_state[1] : null;
let raw_time = /data_access_expiration_time=([^&]*)/.exec(url) || null;
let expiration_time = (raw_time && raw_time.length > 1) ? raw_time[1] : null;
// let error = /\?error=(.+)$/.exec(url);
//获取到三个参数,即视为登录成功
//PS:其实还应该验证回调域名是否匹配
if (access_token && state && expiration_time) {
//向登录窗体发消息,通知器第三方登录成功,继续走原来的流程
AuthUI.webContents.send('oauth.success', {
access_token: access_token,
state: state,
expiration_time: expiration_time,
type: 'facebook'
});
//登录成功后销毁窗体
OAuth.destroy();
}
});
最近做项目要实现Facebook的第三方登录,这简单的记录一下。
目前Facebook的第三方登录有很多方案,且官方提供SDK方便接入。但是我这个项目同时要实现网页和客户端。所以选择了 Facebook 手动构建登录流程的方案。
是不是听着很耳熟?对!和 《实现 Google 第三方授权登录》 一样~
访问此处:https://developers.facebook.com/apps/?show_reminder=true