Javascript bookmarklet: как заменить части URL? - PullRequest
1 голос
/ 07 ноября 2011

Я пытаюсь создать букмарклет Javascript, который будет извлекать числовой идентификатор из URL:

   http://site-1/script-1.php?ID=12345678&other-params

, а затем перенаправить браузер на новый URL:

   http://site-2/script-2.php?id=12345678

Я искал в сети примеры букмарклетов, и у меня есть 2 вопроса, пожалуйста:

1) Нужно ли размещать мой JS-код внутри пустоты ?

javascript:void(XXX);

Что означает void в этом контексте?

2) Должен ли я использовать location.href для чтения старого URL и назначения нового созданного URL?Я спрашиваю, потому что я видел много странных фрагментов кода, таких как String (location.href) и т. Д. - как будто ему нужно приведение к String (не так ли?)

ОБНОВЛЕНИЕ: Я попробовал следующий код, но, к сожалению, в Chrome ничего не происходит, когда я на старой странице и нажимаю на мой букмарклет (в надежде перейти на новую страницу):

javascript:void (
    if ( var match = location.search.match(/id=(\d+)/i) ) 
        location = 'http://site-2/script-2.php?id=' + match[1];
)

(я добавил выше разрывы строк, и да, я пытаюсь использовать один "=")

ОБНОВЛЕНИЕ 2: Моя вторая попытка- просто пытаюсь отобразить новый URL:

javascript:void (
    var match = location.search.match(/ID=(\d+)/);
    alert('http://site-2/script-2.php?id=' + match[1]);
)

, но все равно ничего не происходит, когда я нажимаю закладку на панели закладок.И я вижу в консоли Google Chrome:

Uncaught SyntaxError: Unexpected token var

1 Ответ

2 голосов
/ 07 ноября 2011

1) Если ваш букмарклет возвращает значение, чтобы после выполнения всего кода URL можно было прочитать следующим образом: javascript:%somestring% браузер отобразит эту строку в окне браузера. Таким образом, void() - это всего лишь гарантия ( ref ...The void operator evaluates the given expression and then returns undefined...) от случайной перезаписи документа. Это означает, что если вы осторожны, вам не нужна пустота.

2) Не нужно приводить его, поскольку это произойдет автоматически, если вы не предоставите строковое значение.


Мой шаблон букмарклета:

<a href="javascript:(function(){
  // do stuff but do not return anything
}());">something</a>

Обновление:

javascript:(function () {
  var match = window.location.href.match(/ID=(\d+)/);
  if (match.length > 0) {
    alert('http://site-2/script-2.php?id=' + match[1]);
    // or after debugging: window.location = 'http://site-2/script-2.php?id=' + match[1];
  }
}());
...