Измените атрибут TYPE через JS. Это проблема безопасности? - PullRequest
2 голосов
/ 24 февраля 2012

Должны ли мы иметь возможность изменять атрибут TYPE тега HTML INPUT?

Например, мы делаем это:

Оригинальный HTML:

<input type="text" />

И через jQuery мы меняем его на:

<input type="number" />

Похоже, что это нормально работает в iOS Safari. Мне не приходило в голову, что это будет проблемой.

Но теперь мы наблюдаем некоторые проблемы на некоторых устройствах Android и, проводя некоторые исследования, я нахожу упоминание о том, что некоторые браузеры вообще не позволяют изменять атрибут type из соображений безопасности.

Вопросы: 1) это правда? 2) Если да, то какие именно причины для этого? Я не могу понять, какие проблемы с безопасностью это могло бы вызвать, если бы они это допустили.

UPDATE:

Пока что кажется, что да, это правда, но не из-за какой-либо стандартной практики или спецификации ... просто некоторым браузерам это не нравится. А именно IE и, я думаю, некоторые версии браузеров Android.

Ответы [ 2 ]

4 голосов
/ 24 февраля 2012

Какие соображения безопасности?Это все на стороне клиента.Вы никогда не должны доверять чему-либо на стороне клиента.

Клиенты могут изменять все, что хотят, как в браузере, так и по пути.В этом нет абсолютно никаких проблем с безопасностью.

Я подозреваю, что некоторые браузеры не позволят вам изменить атрибут типа, так как браузер должен будет создать в памяти совершенно новый тип объекта или какую-то другую странность, подобную этой.,Это не имеет ничего общего с безопасностью.

1 голос
/ 24 февраля 2012

Типы ввода могут быть изменены только в том случае, если элемент не прикреплен к документу.

Таким образом, чтобы изменить тип ввода, удалите его из документа, а затем вставьте заново после:

var elem = document.getElementById('someinput'),
    sibling = elem.nextSibling,
    par = elem.parentNode;
par.removeChild(elem);
elem.type = "number"; // new type here
par.insertBefore(elem,sibling);

Это боль, но, как сказал Брэд, это, вероятно, связано с необходимостью создать совершенно новый элемент формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...