如何避免Firefox书签脚本中变量值被自动写入页面document.body
问题原理
Firefox 中运行javascript:协议的书签代码时,若代码最后执行的表达式返回非undefined值,浏览器会默认用该返回值覆盖当前页面内容,就是你遇到的变量值被写入body的现象。你之前新增var y接收计算值的方案本质是:var变量声明语句的返回值为undefined,因此最后无有效非空返回值,就不会触发页面内容替换。
高效解决方案
两种方案都不需要修改原有业务逻辑,不用逐个新增接收变量,改造成本极低:
方案1:用立即执行函数(IIFE)包裹所有代码
IIFE 默认无显式return时返回值为undefined,从根源上避免返回有效内容触发页面覆盖,所有原有业务代码直接放到函数内部即可:
javascript: (function(){ // 直接粘贴你原有的全部业务代码即可,无需修改内部逻辑 var x = 2; x += 1; // 其余数十个变量的计算逻辑全部放这里 })();
方案2:代码末尾追加void 0
如果不想改动代码结构,直接在所有业务代码的最后加一行void 0;即可,该行返回值固定为undefined,可以覆盖之前最后一个表达式的返回值:
javascript: var x = 2; x += 1; // 其他所有业务代码 void 0;
内容的提问来源于stack exchange,提问作者Marcos Santos
相关产品推荐
相关产品推荐

