使用书签更改 url

Posted

技术标签:

【中文标题】使用书签更改 url【英文标题】:Change url with bookmarklet 【发布时间】:2012-04-18 06:28:54 【问题描述】:

尝试编写一个 javascript 小书签以从前端链接跳转到 CMS 编辑页面链接。

所以取一个这样的网址

http://www.example.com/events/13097/article

并制作一个这样的网址

http://www.example.com/admin/edit.php?class=events&id=13097

我认为我需要使用正则表达式来获取类和 id,然后将其包装到 javascript 函数中 - 但我是一个绝对的初学者,想知道是否有人可以让我开始?

【问题讨论】:

如果您使用的是 apache,您也可以查看 mod_rewrite(在服务器端执行此操作,而不是依赖客户端)。 【参考方案1】:

你不需要 正则表达式,试试这个:

var url = ""+window.location;
var urlparts = url.split('/');
window.location = "http://www.example.com/admin/edit.php?class="+urlparts[3]+"&id="+urlparts[4];

从 URL 中拆分类和 id 并在重定向中重复它们。 第一行将window.location 转换为一个字符串,您也可以使用String(window.location) 来执行此操作,但这更冗长。

要获取域名,您可以使用:

"http://"+urlparts[2]+"/admin/edit.php?class="+urlparts[3]+"&id="+urlparts[4]

编辑:实际上,您可以通过window.location.href.split('/') 获得urlparts 或模拟原始代码window.location.toString().split('/') window.location object 中其他感兴趣的项目(示例来自this 帖子)

hash: "#10013173"
host: "***.com"
hostname: "***.com"
href: "https://***.com/questions/10012966/change-url-with-bookmarklet/10013173#10013173"
origin: "http://***.com"
pathname: "/questions/10012966/change-url-with-bookmarklet/10013173"
port: ""
protocol: "http:"
search: ""

【讨论】:

非常感谢 - 这太完美了!【参考方案2】:
//var str = window.location.href;
var str = "http://www.example.com/events/13097/article";
var re = /events\/(\d+)\//;
var match = str.match(re);
var newURL = "http://www.example.com/admin/edit.php?class=events&id=" + match[1];
alert(newURL);

【讨论】:

【参考方案3】:

这是一个用于 C# 单元测试的正则表达式示例。由于您不熟悉正则表达式,因此该模式与您的源 URL 相同,除了两个 capture groups:一个用于类 (?<class>[^/]+),一个用于 id (?<id>[^/]+)。每一个的工作原理是它需要一个或多个不是斜杠(^/) 的字符(加号)并将其存储在尖括号中名称的正则表达式组中。

var source = "http://www.domain.com/events/13097/article";
var expected = "http://www.domain.com/admin/edit.php?class=events&id=13097";
var pattern = "http://www.domain.com/(?<class>[^/]+)/(?<id>[^/]+)/article";
var r = new Regex(pattern);
var actual = r.Replace(source, "http://www.domain.com/admin/edit.php?class=$class&id=$id");
Assert.AreEqual(expected, actual);

【讨论】:

以上是关于使用书签更改 url的主要内容,如果未能解决你的问题,请参考以下文章

用于编辑当前 URL 的书签

使用 Ext JS 为标签添加书签?

如何在 Android 6.0 (API 23) 中继续使用浏览器书签更改

如何更改 Flutter WEB 中的“状态栏”颜色? (保存为书签后)

[Javascript]填充没有ID的文本框和使用书签在页面重新加载时更改的名称

在我的自定义列表项中单击书签图像的侦听器,多次更改另一个 row_item 图像