encodeURIComponent не возвращает кодированный URI

#javascript #google-chrome #url #browser #bookmarklet

Вопрос:

Я хотел бы создать букмарклет, который добавляет URL-адрес текущей страницы к другому предопределенному URL-адресу.

 javascript:(function(){location.href='example.com/u=' encodeURIComponent(location.href)}());
 

Однако возвращенный URL-адрес не закодирован, но когда я попробовал encodeURIComponent(encodeURIComponent(location.href)) , это сработало. Я не понимаю, почему удвоение кодового компонента делает его другим?

Ответ №1:

Попробуйте это:

 var href = (a) => {return 'example.com/u=' encodeURIComponent(a)}
 

и позвоните href , чтобы получить закодированный URL-адрес.

 var encoded_url = href(location.href)
 

Комментарии:

1. На самом деле я не хочу усложнять ситуацию, просто чтобы понять, почему мне нужно было удвоить «кодировочный компонент», чтобы заставить его работать.

2. Не уверен насчет этого, я работаю с одиночкой encodeURIComponent . Можете ли вы добавить немного больше информации о том, как вы создаете свой букмарклет?

3. На самом деле я использую букмарклет, упомянутый здесь: youtube4kdownloader.com/en5/bookmarklet.html и посмотрите, как они используют double encodeURIComponent . Это сработало, когда вы оставили его таким, но не тогда, когда вы его удалили encodeURIComponent . Вы можете использовать этот букмарклет в видео на YouTube, чтобы понять, что я имею в виду.