0

У меня есть следующая ситуация.decodeURIComponent не удается получить URI из формы submit to chrome.webRequest

  • я сделать запрос GET через HTML-форму
    • У меня есть одно текстовое поле и поле имеет содержание <<BLAH>alert (”BLAH”);//<</ blah >. Это недействительная гипотетическая разметка.
  • я есть слушатель событий на webRequest
  • я попытка decodeURIComponent на полный адрес WebRequest, подчинением стало началом формы
  • декодирования повреждается, вопреки ожиданиям.
    • Я ожидаю, что decodeURIComponent должен иметь возможность декодировать все, что браузер кодирует из формы. это, как представляется, неправильное предположение, или ошибка в хроме: 55.0.x *

Если ниже JS был в расширении хром, следующий фрагмент кода продемонстрирует проблему.

var filter = { urls: ['<all_urls>'] } 
 

 
function handler (details) { 
 
    decodeURIComponent(details.url) 
 
} 
 
chrome.webRequest.onBeforeRequest.addListener(
 
    handler, 
 
    filter, 
 
    ['blocking', 'requestBody'] 
 
)
<form method='get'> 
 
    <input type='text' name='field'/> 
 
    <button type='submit'>submit</button> 
 
</form>

Конечно, вы не можете на самом деле запустить это - WebRequest является частью расширения хром API.

Ищите советы. Благодаря!

+0

Пожалуйста, задавайте вопрос по теме: включите ** полный ** [mcve], который * дублирует проблему *. Включая * manifest.json *, некоторые из сценариев background/content/popup/HTML. Вопросы, требующие помощи по отладке («** почему этот код не работает? **)) должны включать: ► желаемое поведение, ► конкретную проблему или ошибку * и * самый короткий код, необходимый для его воспроизведения ** в вопросе сам**. Вопросы без четкого описания проблемы не полезны другим читателям. Смотрите: «** Как создать [mcve] **», [о каких темах я могу спросить здесь?] (Http://stackoverflow.com/help/on-topic) и [ask]. – Makyen

+0

Что именно * отображается * в [различных соответствующих консолях для вашего расширения] (http://stackoverflow.com/a/38920982/3773011) при загрузке и выполнении расширения? Пожалуйста, укажите * точные * входы, выход из строя и ожидаемый результат. – Makyen

+0

Вы пытаетесь декодировать весь URI. Обычно вы должны использовать: ['decodeURI()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI), но используя [decodeURIComponent()] (https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent) вместо этого не должен приводить к сбою. – Makyen

ответ

0

Это был корень, вызванный кудрявыми цитатами. Chrome не переназначает любые символы от вашего имени, чтобы быть дружественным к URI. Это '”' !== '"', и мое поле формы использовало . ==>%94. Что странно, что форма под капотом не использует encodeURIComponent('”') ==> %E2%80%9D. Во всяком случае, decodeURIComponent('%94') взрывается.

+0

Кто кодирует '' 'как'% 94'? Это не действительное процентное кодированное значение. – Kaiido

+0

Chrome. Форма HTML. – cdaringe

+0

Итак, у целевого запроса есть этот '% 94BLAH% 94'? Или это только в обработчике событий 'onBeforeRequest'' .details'? На моем хром это запрос с '% E2% 80% 9DBLAH% E2% 80% 9D', как и ожидалось. Кроме того, какая версия хром это? – Kaiido

0

У меня была ошибка URI malformed в Google Chrome, когда я попытался декодировать строку, используя decodeURIComponent. Он потерпел неудачу на символе %, который был в этой строке, я не хотел, чтобы какая-либо проверка произошла в действительности этой строки. Таким образом, я закончил использовать метод unescape intsead: unescape(mystring)

Смежные вопросы