当我点击页面上的链接时,我正在尝试删除目标网页。该页面不是我的,所以我试图用用户脚本更改href。
没有任何修改,链接如下所示:
https://www.domain.com/out.php?u=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPUZ1bC-1XjA%26amp%3Bfeature%3Drelated
我想要的是什么:
http://www.youtube.com/watch?v=PUZ1bC-1XjA&feature=related
到目前为止我得到了什么:
http://www.youtube.com%2fwatch%3fv%3dpuz1bc-1xja%26amp%3bfeature%3drelated/
但该地址在浏览器中不起作用。
这是我目前的代码:
$('a').each(function(index) {
var aLink = $(this).attr('href');
if(aLink) {
if(aLink.indexOf("out.php?u=") > 0) {
aLink = aLink.substring(51);
console.log(aLink);
$(this).attr('href', "http://"+aLink);
console.log($(this).prop('href'));
}
}
});
所有帮助和提示表示赞赏。
答案 0 :(得分:3)
您需要使用decode
decodeURIComponent
网址
变化:
$(this).attr('href', "http://"+aLink);
要:
$(this).attr('href', 'http://' + decodeURIComponent(aLink));
答案 1 :(得分:0)
答案 2 :(得分:0)
您还可以使用锚元素的hostname
,pathname
和search
参数。
// general function to turn query strings into objects
function deserialize_query_string(qs) {
var params = {};
var fields = qs.split('&');
var field;
for (var i=0; i<fields.length; i++) {
field = fields[i].split('=');
field[0] = decodeURIComponent(field[0]);
field[1] = decodeURIComponent(field[1]);
params[field[0]] = field[1];
}
return params;
}
$(document.links).each(function(i){
if (this.hostname=='www.domain.com' && this.pathname=='/out.php') {
var params = deserialize_query_string(this.search);
if (params.u) {
this.href = u;
}
}
});