Собственный код Safari - PullRequest
       11

Собственный код Safari

2 голосов
/ 25 апреля 2009

Кто-нибудь знаком с Native Code в OS X Safari (версия 3 и WebKit)? Я использую Javascript для анализа некоторой информации в форме, и один из моих входов называется «теги». При попытке получить значение этого элемента, используя:

// button is being passed through a function as a DOM object
var tags = button.form.elements["tags"].value;

Safari возвращает какую-то функцию. Я получил его для предупреждения о таких значениях, как «function tags () {[native code]}» и Node Trees, но я просто не могу понять, почему у меня будут проблемы. Если у кого-то есть подсказка, пожалуйста, дайте мне знать. Я заставил его работать, изменив имя входа на что-то другое, а также перебирая все элементы и используя операторы if (), чтобы определить, нужен ли мне этот элемент, но мне очень любопытно, почему Apple ограничить использование любого элемента формы с именем "tags" ...

P.S. - Это тест и отлично работает в Firefox.

1 Ответ

6 голосов
/ 25 апреля 2009

[native code] просто означает, что это функция, встроенная в браузер, а не написанная на JavaScript. tags представляется расширением WebKit для DOM, позволяющим получить список элементов в форме по имени тега. Например, если я запускаю это на странице StackOverflow, я получаю текстовую область ответа:

document.getElementById('submit-button').form.elements.tags("textarea")[0]

Проблема заключается в том, что индекс в коллекции в JavaScript также обращается к любым свойствам объекта (включая методы), поэтому при попытке доступа к названному элементу tags вместо этого вы получаете метод объекта elements, который WebKit определяет. К счастью, есть обходной путь; Вы можете позвонить namedItem в списке элементов, чтобы получить предмет по id или name:

var tags = button.form.elements.namedItem("tags").value;

edit : обратите внимание, что, вероятно, лучше использовать namedItem в целом, даже в других браузерах, в случае, если вам нужно получить элемент с именем item или length или что-то в этом роде; в противном случае, если вы используете их как индекс с оператором [], вы получите встроенный метод item или length вместо вашего элемента.

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