于是我们只需让表达式返回的是undefined就可以了,但必须比void()这几个字符短。要产生一个undefined,除了它字面常量外,另外就是调用没有返回值的函数,或者访问一个对象不存在的属性。我们要尽可能简短。如果页面里使用了jQuery的话,我们用$.X就可以得到一个undefined。但没用jq的话,就不能保证是否存在变量$了。既然找不到足够简短的全局变量,我们可以用json创造个匿名的,比如[]或{},然后访问他的不存在属性,比如[].X。于是,我们可以告别void了:
复制代码 代码如下:
javascript:with(document)body.appendChild(createElement('script')).src='...';[].X
这样就减少了1个字节。我们还可以合并下代码,用表达式替换X:
复制代码 代码如下:
javascript:with(document)[][body.appendChild(createElement('script')).src='...']
这样又减少了1个字节。
事实上,js里的任何一个变量都是继承于Object的,即使数字也不例外。所以,我们完全可以用一个数字替换[],这样更进一步减少1个字符:
复制代码 代码如下:
javascript:with(document)0[body.appendChild(createElement('script')).src='...']
到此,代码里除了src字符外,缩短到76字节。
当然,最终的极限仍在探索中。。。
配合Google的短域名服务Google URL Shortener,我们可以缩短脚本的URL,例如:
复制代码 代码如下:
javascript:with(document)0[body.appendChild(createElement('script')).src='http://goo.gl/QPp29']