该问题涉及MDN文档中使用Web worker的example。
在整个示例中,几个“随机查找”字符串用作键:“vo42t30”,“rnb93qh”,“bk4e1h0”,“ktp3fm1”,...
oWorker.onmessage = function (oEvent) {
if (oEvent.data instanceof Object && oEvent.data.hasOwnProperty("vo42t30") &&
oEvent.data.hasOwnProperty("rnb93qh")) {
oListeners[oEvent.data.vo42t30].apply(oInstance, oEvent.data.rnb93qh);
} else {
this.defaultListener.call(oInstance, oEvent.data);
}
};
使用此类字符串的原理是什么?
(我可以想象一些现实世界的代码可能会使用这种字符串作为混淆的一种形式,但是由于混淆这样的教学示例没有意义,因此我认为还必须进行其他一些解释。)
也许用一个更好的方式来表达这个问题是:对于这种网络 worker 密钥,使用人类可读的字符串(例如“methodName”)是否存在问题?
最佳答案
该示例中的代码用于创建特殊类型的Web Worker。
该特殊工作人员检查消息是否具有某些密钥,如果有,则该工作人员以特殊方式处理该消息。
并非所有消息都将具有此特殊密钥。没有该密钥的消息应正常处理。例如,这种其他类型的消息可能具有以用户输入命名的键。
由于我们不知道常规消息将拥有哪些密钥,并且我们必须确保常规消息不会使用我们的密钥,因此我们选择了一个非常独特的密钥,在这种情况下很乱,希望它不会用作常规消息中的密钥。
这种方法的一个问题是,如果键来自用户输入,则用户可能会通过发送乱码作为输入来触发意外行为。
关于javascript - 为什么在MDN的网络 worker 示例中使用随机关键字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32101558/