Javascript bookmarklet:如何替换URL部分?

时间:2011-11-07 10:23:15

标签: javascript bookmarklet

我正在尝试创建一个Javascript书签,它会从网址中提取数字ID:

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

然后将浏览器重定向到新网址:

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

我已经在网上搜索了bookmarklet示例,我有两个问题:

1)我是否需要将我的JS代码放在 void

javascript:void(XXX);

void 在此上下文中意味着什么?

2)我应该使用 location.href 来阅读旧网址并分配新构建的网址吗?我问的是因为我看过许多奇怪的代码片段,比如 String(location.href)等 - 就像它需要一些 cast 到String (是吗?)

更新:我已经尝试了以下代码,但不幸的是,当我在旧页面上点击我的书签时(希望导航到新的)页):

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

(我在上面添加了换行符,是的,我尝试使用单个" =")

更新2:我的第二次尝试 - 只是尝试显示新网址:

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

但当我点击书签栏上的书签时,仍然没有任何反应。我在谷歌Chrome控制台中看到了:

Uncaught SyntaxError: Unexpected token var

1 个答案:

答案 0 :(得分:2)

1)如果您的bookmarklet返回一个值,以便在运行所有代码后,该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];
  }
}());