目录
一、问题描述(背景)
(工具:myeclipse10.7,工作空间编码UTF-8,HTML字符集UTF-8,Chrome)
为了实现返回上一页的效果,我写的代码是:
<a href="url" οnclick="javascript:window.history.go(-1);return false;">返回上一个页面</a>
但是去发现没有生效,回不去,不知道怎么回事?然后我去百度找了很多资料,各种情况都有;很多是说:“因为浏览器处理不同,需要加上return false;”,(return false是为了禁用href属性)但是我的加了都没效果!
二、探索
2.1 自己摸索
既然百度没有给我答案,那还得靠自己。
因为我怀疑是我的英文拼写出错了,所以我就把其他页面的相同语句复制过来,如下:
<a href="url" οnclick="javascript:window.history.go(-1);return false;">返回上一个页面</a>
<a href="url" onclick="javascript:window.history.go(-1);return false;">javascript:window.history.go(-1);return false;</a>
这里看起来没什么不一样,但是在我的编辑器里面却差的有点远!!
如上图,两行代码字体风格都不一样……咋这么秀呢???然后第一行左侧有警告,第二行没有!!!
看了下警告是onclick,我把鼠标分别放在这两行的onclick上,编辑器提示是不一样的,如下:
第一行:
Multiple annotations found at this line: - Undefined attribute name (οnclick). - Undefined attribute name (οnclick).
第二行:
Attribute : onclick Data Type : EVENT
其实第一行的警告还是挺常见的,因为IDE是myeclipse10.7,有点年代了,经常会识别HTML5 的标签,所以我也没有特别去注意这个问题。我关注的是为什么这两行代码的onclick会显示不一样??
我去浏览器实际运行了下,发现,正如IDE警告一样,第一行不能实现“返回上一页”,第二行却可以!!灵异事件,太诡异!!
2.2 求助大佬
虽然我发现了这两行代码有所不同,但是却还是不知所以,毫无办法。因此又去StackOverflow问人,然后有大佬说是编码问题,如下图:
看完后我若有所思,去看了下我再StackOverflow发的示例代码:请注意我全出来的红色部分!
这里的代码是用markdown语言写的,内容是直接从IDE复制过来,这里就显示了不同。加之根据大佬的回答可知是onclick中的字母o的问题,第一行是UTF-8格式的,第二行的是ASCII格式的,所以IDE里面会报警告。看到这里我恍然大悟,突然想起之前也有去网址复制别人代码,然后出现类似问题的情况,之前的是标签之前的空格的格式是不一样的,然后IDE直接就报错了,而不是警告;而这里是在标签里面,形式上像是标签的属性,但是因为onclick中的字母o的编码问题,所以直接将这个属性是未标记的属性,仅仅是报警告。
三、总结:
兜兜转转这么久,总算是解决了,之前还以为是 javascript:window.history.go(-1);return false; 的浏览器兼容性问题,看来不是,仅仅是字符编码问题,真的是要郁闷死了。
收获:复制代码到编辑器,很容易出现编码问题,是因2种编码不一致造成的,很多时候从网页复制出来的也是这样。如果代码不多的话,最好自己敲下来。