Скрипт Greasemonkey для изменения URL-адреса не работает?

Я только что попытался сделать этот скрипт:

// ==UserScript==
// @name           Link Bypasser Script
// @include *http://onion.com/*
// @run-at      document-start
// ==/UserScript==

var oldUrl  = window.location;

var newURL  = "http://localhost:8887/processor.php?link=" + oldUrl;
window.location.replace (newURL);

Я «включаю» больше URL-адресов, но я не думаю, что это уместно показывать, в любом случае, я думал, что этот скрипт превратит, например, http://onion.com/4GUTDTA в http://localhost:8887/processor.php?link=http://onion.com/4GUTDTA, но ничего не происходит:

До этого пробовал:

var oldUrlPath  = window.location.path;

с участием:

+ "http://localhost:8887/processor.php?link=" + oldUrlPath

Что, однако, изменило его, но добавило эту ссылку только перед путем, что имеет смысл, потому что я использовал window.location.path. Я также пытался использовать

 var oldUrl  = window.location.href;

который ничего не сделал.


person DisplayName    schedule 14.03.2016    source источник


Ответы (2)


Вы должны закодировать строку с помощью encodeURIComponent, прежде чем добавлять ее. на URL:

var oldUrl  = window.location.href;
var newURL  = "http://localhost:8887/processor.php?link=" 
              + encodeURIComponent(oldUrl);
window.location.replace (newURL);
person trincot    schedule 14.03.2016
comment
Я не знаю, связано ли это с вашим кодом или нет, но ничего не происходит. Вероятно, что-то не так в начале. - person DisplayName; 15.03.2016
comment
Я хотел бы понять, почему это не работает для вас. Я воспроизвел это на своей машине с помощью GreaseMonkey, и все работает отлично. Принятый ответ не работает, поскольку он дублирует аргументы URL. Используете ли вы @grant в заголовке GreaseMonkey? Я предположил, что нет, потому что это не в вопросе. - person trincot; 16.03.2016

person    schedule
comment
Я не понимаю, как это может быть правильно. Он дважды добавляет части поиска и хэша к новому URL-адресу. - person trincot; 16.03.2016
comment
@trincot вам нужно вызвать decodeURIComponent() перед вызовом window.location.replace ? Кроме того, я удалил дополнительные части поиска и хеширования. - person koolhuman; 16.03.2016