我正在尝试创建一个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
答案 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];
}
}());