Кодирование переменных URL в HREF по сравнению с onclick с использованием JS window.location - PullRequest
0 голосов
/ 30 августа 2018

Я не знаю, почему эта ссылка не работает, но у меня есть перенаправление Javascript (window.opener.location), по которому я передаю несколько переменных через URL, и возникают проблемы, когда эти переменные содержат апострофы. Я использую URLENCODE () в PHP для создания ссылки, которая выглядит так, как будто она делает то, что мне нужно, когда я сбрасываю исходный код, но Safari и Chrome выдают ошибки «Неожиданный идентификатор в« www »», когда я нажимаю на ссылку.

Кажется, это говорит мне о том, что ссылка JS по-прежнему обрабатывается так, как если бы она имела апостроф вместо эквивалента% 27 апостроф? Я использую фиктивное имя "qqq'www qqq'www" с апострофами в имени и фамилии, чтобы в моем тестировании разбить как можно больше материала.

Вот ссылка, с которой у меня возникли проблемы:

<a href="javascript:top.close();window.opener.location='../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www'"><em>Yes</em></a>

Но если я поменяю ссылку на использование onclick вместо HREF, это сработает? Я понимаю, что это лучший метод кодирования, чем href = 'javascript: ...'.

<a href="#" onclick="top.close();window.opener.location='../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www'"><em>Yes</em></a>

Все идентично, кроме , где Я делаю вызов JS. Возможно, это связано с тем, как HREF и onclick обрабатываются при кодировании / декодировании? Может быть, HREF расшифровывает апострофы перед вызовом ссылки, потому что JS встроен в вызов HREF?

Любое понимание этого поведения будет оценено, чтобы я мог лучше понять, что на самом деле здесь происходит. Да, это работает, но не зная, почему я чувствую себя хуже разработчика ...

Спасибо!

1 Ответ

0 голосов
/ 30 августа 2018

Ваши ссылки не имеют> для завершения начального <a - и да, не используйте href="javascript:

Также, если вам нужно кодировать, используйте encodeURIComponent и, наконец, не пытайтесь закрыть окно перед сменой открывателя.

Но почему бы не назвать открывающему и пользователю имя цели и setTimeout?

<a target="nameOfOpener" 
href="../cust/maint_cust.php?action=del_are_you_sure&cust_id=249735&lname=Qqq%27www&fname=Qqq%27www"
onclick="setTimeout(function() {top.close()},100)"><em>Yes</em></a>
...