2010-04-21 5 views
1

У меня есть хороший кусок JavaScriptJavascript. - Проблема с экранирующими символами в букмарклетах

<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> 

Это работает вполне удовлетворительно, когда я посещаю .html файл, который я хранить JavaScript в

Однако Я хотел бы получить тот же эффект от использования букмарклета - однако, когда я ставлю

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, а не re% 3A2010% 2F4% 2F20

Я предполагаю, что есть какие-то проблемы с escape-символами в системе закладок или javascript, но я никуда не денусь - кто-нибудь хочет протянуть руку?

Джо

ответ

1

Я хотел бы попробовать обертывание, что весь кусок кода в функции, так что ваш букмарклет (неэкранированный) выглядит следующим образом:

(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 

Также есть функция в экземплярах даты, называемая «getFullYear».

+0

Работали хорошо, большое спасибо :) – Joe

1

Почему% 20 - ни один из моих букмарклеты никогда не нужно, что

0

Другой способ получить сценарий, чтобы сделать вытекание:

window.location = "https://mail.google.com/mail/?shva=1#search/" + encodeURIComponent("in:inbox") + "+" + encodeURIComponent("before:" + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate()); 
Смежные вопросы