博客 (830)

在 Godday 上搜索域名,会引导购买一个叫“域名购买服务”的产品(英文版上是人民币 472 元,新加坡简体中文版上的新加坡元换算成人民币更贵),稍不注意就会以为是域名本身,其实是让 Godday 联系域名所有者实现交易的服务费。付款后可设置你希望购买该域名的价格范围。

发现入坑后立刻问度娘,发现好多人跟我一样被坑。

于是按 https://sg.godaddy.com/zh/contact-us 上的 400 电话打过去,客服 MM 说原则上是不退款的哦。后来又得知我没有设置过域名报价,她说可以试试提交一下退款申请。听了十几分钟的音乐后,客服提交完毕,告诉我,如果审批成功,2 天内会收到邮件,15 天内会收到退款。

等了 48 小时没有收到邮件。第 3 天晚上,直接收到退款。

xoyozo 6 年前
4,919

一般地,我们会设置网站中的图片文件仅允许本网站页面调用,或者开放地址栏直接打开,但不允许其它网站调用。

这就需要在 Web 服务器上判断图片的来源(Referer)。

但是,当网站页面是 https,而图片地址是 http 时,考虑到安全性,浏览器将不带 Referer,这时如果图片允许在地址栏直接打开(即 Referer 为空),就起不到防盗链的作用了。

所以图片服务器在处理防盗链时,尽量不要允许 Referer 为空时调用。这时如果要单独允许另一个网站来调用图片,应该使用一致的 protocol。

xoyozo 6 年前
4,106

HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

Common causes of this issue:

  • The application process failed to start

  • The application process started but then stopped

  • The application process started but failed to listen on the configured port

Troubleshooting steps:

  • Check the system event log for error messages

  • Enable logging the application process' stdout messages

  • Attach a debugger to the application process and inspect

For more information visit: https://go.microsoft.com/fwlink/?LinkID=808681


发现装错了东西,服务器上应该安装 dotnet-hosting-*.*.*-win.exe,而非 dotnet-runtime-*.*.*-win-x64.exe

xoyozo 6 年前
6,132
二维码类型可扫码授权的微信号
其它微信号
直接扫码将二维码截图发送给可扫码授权的微信号无需劳烦管理员的方式
登录微信公众平台管理员与运营者

扫码后需管理员验证登录(管理员通过“公众平台安全助手”接收消息,点开详情后点击“确定”)

授权人用摄像头扫码,点击“确定”
成为运营者
设置公众号IP白名单管理员与长期运营者无法完成授权人用摄像头扫码,点击“确定”
成为长期运营者
公众号绑定运营者管理员无法完成管理员用摄像头扫码,点击“确定”

小程序添加/删除项目成员

管理员无法完成管理员直接识别二维码,点击“确定”
小程序修改名称、修改简称、修改登录邮箱、修改密码管理员无法完成“修改简称”管理员用摄像头扫码,点击“确定”,其它未测
小程序修改业务域名
管理员、有“开发者”权限的项目成员无法完成授权人直接识别二维码,点击“确定”成为有“开发者”权限的项目成员
微信开放平台绑定小程序管理员无法完成管理员用摄像头扫码,点击“确定”

① 摄像头扫码:无法直接用“识别二维码”,必须把二维码发送到身边的其它设备,再使用手机摄像头完成扫码

② 成为运营者要求绑定银行卡;成为运营者将占用“微信号绑定的帐号”数量,详见说明。若达到上限,只有法定代表人可继续成为运营者。在公众号“公众平台安全助手”中可查询绑定的帐号。

另外:

  • 小程序添加/删除体验成员无须管理员授权

  • 如果管理员未关注公众号“公众平台安全助手”,待测……

xoyozo 6 年前
5,245

常用获取英文的方法是查看英文版 App。


微信:WeChat

小程序:Mini Programs

公众号:Official Accounts

订阅号:Subscriptions

朋友圈:Moments

已登录的:Logged

服务通知:Service Messages

置顶:Sticky on Top / Remove from Top

发送给朋友:Share to Friends

微信号:WeChat ID

钱包:Wallet

余额:Balance

资金/零钱/基金:Funds

金额:Amount

明细:Details

账单:Transactions

资产:Assets

收入/收益:Income

财富:Fortune

登录:Log In / Login

退出登录:Log Out / Logout

xoyozo 6 年前
6,152

第一种方式,直接执行上一页的原生方法:

var pages = getCurrentPages();
if (pages.length > 1) {
	var prePage = pages[pages.length - 2];
	prePage.onPullDownRefresh();
}

第二种方式,在上一页的 onShow() 中对数据进行更新。

推荐使用第一种方式,但只能调用原生方法,不能直接调用 methods 中的自定义方法(详见)。第二种方式的缺点是,有时候不需要在返回上一页时更新数据,但它仍会执行。

xoyozo 6 年前
2,827

注册苹果开发者账号和发布 App 会填写一些联系邮箱,一旦账号或应用违规,苹果方也只会以解决方案中心或邮件的形式通知开发者,一旦超过时限,可能会采取一些强制措施,影响到我们的 App 正常上架运营,本文罗列了一些相关的电子邮箱,如有不全请指正。

  1. 在注册 Apple ID (https://appleid.apple.com/account/manage)时会填写 3 个邮箱,一个用于登录用户名,一个作为常规联系,第 3 个是用于救援(估计是常规联系邮箱失效时才会用到)。

    image.png

  2. 在 App Store Connect (https://appstoreconnect.apple.com/)中发布新版本 App 时会填写两个邮箱,一个是 App 的联系邮箱,一个是审核联系邮箱。

    image.png

  3. 当我们在联系审核团队(https://developer.apple.com/contact/app-store/)时,可能会填写一个邮箱,用于针对当前问题进行反馈。

  4. 苹果的“联系我们”(https://developer.apple.com/contact/

  5. 其它一些主动提交的信息,用于反馈,如:投诉侵犯知识产权(https://www.apple.com/legal/internet-services/itunes/appstorenotices/#?lang=zh

xoyozo 6 年前
6,035

当使用在线编辑器编辑一篇文章(或从 Word 复制)后,会得到包含 HTML 标签的字符串内容,可以直接将它输出到页面上而不需要进行 HTML 编码。

但是,当我们需要改变图片大小时,我们发现有些图片的尺寸是直接使用 style 属性固定的,除了用 JS 进行后期处理,我们可以在服务端对 <img /> 进行修正。

这个场景会在小程序开发的时候遇到。

我们可以在客户端用 JS 进行处理,也可以在服务端用类似的方法处理(使用正则表达式)。参此文

这里使用 HtmlAgilityPack 通过递归节点来处理:

/// <summary>
/// 给所有指定节点添加样式
/// </summary>
/// <param name="html"></param>
/// <param name="tag">节点名称(小写),如:img</param>
/// <param name="styles">要添加的样式,如:max-width:100%;</param>
/// <returns></returns>
public static string AddStyleToHtmlNode(string html, string tag, string styles)
{
    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(html);

    for (var i = 0; i < doc.DocumentNode.ChildNodes.Count; i++)
    {
        doc.DocumentNode.ChildNodes[i] = AddStyleToHtmlNode(doc.DocumentNode.ChildNodes[i], tag, styles);
    }

    return doc.DocumentNode.OuterHtml;
}
private static HtmlNode AddStyleToHtmlNode(HtmlNode node, string tag, string styles)
{
    if (node.Name == tag)
    {
        var style = node.GetAttributeValue("style", null);
        node.SetAttributeValue("style", ((string.IsNullOrWhiteSpace(style) ? "" : style.Trim() + ";") + styles).Replace(";;", ";"));
    }
    for (var i = 0; i < node.ChildNodes.Count; i++)
    {
        node.ChildNodes[i] = AddStyleToHtmlNode(node.ChildNodes[i], tag, styles);
    }
    return node;
}

直接调用:

Content = zStringHTML_190126.AddStyleToHtmlNode(Content, "img", "max-width:100%;height:auto;");


xoyozo 6 年前
4,939

当使用在线编辑器编辑一篇文章(或从 Word 复制)后,会得到包含 HTML 标签的字符串内容,可以直接将它输出到页面上而不需要进行 HTML 编码。

但是,当我们需要改变图片大小时,我们发现有些图片的尺寸是直接使用 style 属性固定的,除了用 JS 进行后期处理,我们可以在服务端对 <img /> 进行修正。

这个场景会在小程序开发的时候遇到。

网上一般使用正则表达式直接将 <img 替换成 <img style="max-width: 100%; height: auto;" ,缺点是如果该 <img /> 本身就带有 style 属性,那么会出现一个标签两个 style,很多情况导致这两个样式同时失效,所以我们应针对有 style 和无 style 分别处理。

// 把 <img src="a.jpg" style="display: block;" /> 替换成 <img src="a.jpg" style="display: block;;max-width:100%;height:auto;" />
Content = Content.replace(/(\<img\s+[^>]*style\s*\=\s*['"][^'"]*)(['"])/gi, '$1;max-width:100%;height:auto;$2');

// 把 <img src="b.jpg" /> 替换成 <img src="b.jpg" style="max-width:100%;height:auto;" />
Content = Content.replace(/(\<img\s+((?!style).)+?)(\/?>)/gi, '$1 style="max-width:100%;height:auto;" $3');

复制以上代码时,半角空格可能会变成全角空格,请注意修正。

当有 style 时,我们将 max-width: 100%; height: auto;追加在原样式之后,以重写原样式。这里没有直接判断原样式是否以 ; 结尾,而是直接追加 ;,这并不会影响实现展示效果。

在判断没有 style 用到正则表达式的“断言”,参:https://blog.csdn.net/xuyangxinlei/article/details/81359366

延伸阅读:C# 用 HtmlAgilityPack 给 HTML 节点加上 style

xoyozo 6 年前
5,997

2019/2/16 补充:参见 JavaScript 中的 TruthyFalsy

使用以下代码对字符串 s 进行判断:

var s = null;
if (s) {
    console.log('true');
} else {
    console.log('false');
}

测试当 s 为不同值时的结果如下:

s 的值if(s) 的结果
s = null;false
s = undefined;false
s = '';false
s = "";false
s = 0;false
s = 1;
true
s = 2;
true
s = -1;
true
s = '0';
true
s= ' ';true

结论:

s 未定义或未赋值时,结果为 false

s 为字符串类型时,长度为 0 即 false,长度大于 0 即 true

s 为数字类型时,等于 0 为 false,不等于 0 为 true


如果判断 s 的长度:

var s = null;
if (s.length > 0) {
    console.log('true');
} else {
    console.log('false');
}

那么会有以下结果:

s 的值if(s.length > 0) 的结果
s = null;Uncaught TypeError
s = undefined;Uncaught TypeError
s = '';false
s = "";false
s = 0;false
s = 1;
false
s = 2;
false
s = -1;
false
s = '0';
true
s= ' ';true

结论:

s 未定义或未赋值时,异常;

s 为字符串类型时,长度为 0 即 false,长度大于 0 即 true

s 为数字类型时,永远为 false

这样的话,if(s.length > 0) 等同于 if(s.length)


综上所述,判断一个字符串是否“有值且长度大于 0 ”,可以这样写:

var s = null;
if (s && s.length) {
    console.log('true');
} else {
    console.log('false');
}

相反,是否“无值或长度为 0”,可以这样写:

var s = null;
if (!s || !s.length) {
    console.log('true');
} else {
    console.log('false');
}

当然,如果要将不为 0 的数字类型也视为“有值”,只要 if(s) 或 if(!s) 即可。


xoyozo 6 年前
8,488