Javascript - bookmarklet中的转义字符问题

时间:2010-04-21 18:03:20

标签: javascript firefox bookmarklet

我有一个很好的javascript

<script type="text/javascript"><!--
var d = new Date();
d.setTime(d.getTime()-86400*1000);
window.location = "https://mail.google.com/mail/?shva=1#search/in%3Ainbox+before%3A"+(d.getYear()+1900)+"%2F"+(d.getMonth()+1)+"%2F"+d.getDate();
//-->
</script>

当我访问存储javascript的.html文件时,这完全令人满意。

但是,我想通过使用书签来获得相同的效果 - 但是,当我放

javascript:var%20d%20=%20new%20Date();%20d.setTime(d.getTime()-86400*1000);%20window.location%20=%20"https://mail.google.com/mail/?shva=1#search/in%3Ainbox+before%3A"+(d.getYear()+1900)+"%2F"+(d.getMonth()+1)+"%2F"+d.getDate();

进入我的书签我被重新考虑:2010/4/20而不是 %%3A2010%2F4%2F20

我假设书签系统或javascript中的转义字符存在一些问题但是我没有得到任何地方 - 有人想关心吗?

3 个答案:

答案 0 :(得分:1)

我会尝试在函数中包装整个代码块,以便您的bookmarklet(未转义)看起来像这样:

(function() {
    var d = new Date();
    d.setTime(d.getTime()-86400*1000);
    window.location = 
      "https://mail.google.com/mail/?shva=1#search/in%3Ainbox+before%3A" + 
      d.getFullYear()+"%2F"+(d.getMonth()+1) + "%2F" + d.getDate();
})();

但那只是我。更重要的是,当您将其转换为书签形式时,这些转义字符需要进行双重转义。

javascript:%28function%28%29%20%7B%0A%20%20%20%20%20%20%20%20var%20d%20%3D%20new%20Date%28%29%3B%0A%20%20%20%20%20%20%20%20d.setTime%28d.getTime%28%29-86400*1000%29%3B%0A%20%20%20%20%20%20%20%20window.location%20%3D%20%0A%20%20%20%20%20%20%20%20%20%20%22https%3A//mail.google.com/mail/%3Fshva%3D1%23search/in%253Ainbox+before%253A%22%20+%20%0A%20%20%20%20%20%20%20%20%20%20d.getFullYear%28%29+%22%252F%22+%28d.getMonth%28%29+1%29%20+%20%22%252F%22%20+%20d.getDate%28%29%3B%0A%20%20%20%20%7D%29%28%29%3B

在Date实例上还有一个名为“getFullYear”的函数。

答案 1 :(得分:1)

为什么%20 - 我的书签都不需要

答案 2 :(得分:0)

另一种方法是让脚本执行转义:

window.location = "https://mail.google.com/mail/?shva=1#search/" + encodeURIComponent("in:inbox") + "+" + encodeURIComponent("before:" + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate());