Safari Native Code

时间:2009-04-24 23:54:26

标签: javascript webkit

是否有人熟悉OS X Safari(版本3和WebKit)中的本机代码?我正在使用Javascript来解析表单中的一些信息,我的一个输入被命名为“tags”。尝试使用以下方法获取该元素的值时:

// 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 个答案:

答案 0 :(得分:6)

[native code]只是意味着它是一个内置于浏览器中的函数,而不是用JavaScript编写的。 tags appears to be DOM的WebKit扩展,允许您按标记名称获取表单中的元素列表。例如,如果我在StackOverflow页面上运行它,我会得到答案文本区域:

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

问题是JavaScript中集合的索引还可以访问任何对象属性(包括方法),因此当您尝试访问命名元素tags时,您将获得{{1}上的方法WebKit定义的对象。幸运的是,有一个解决方法;您可以在元素列表上调用namedItem以获取elementsid项目:

name

编辑:请注意,如果您需要检索名为var tags = button.form.elements.namedItem("tags").value; 或{{1}的元素,即使在其他浏览器中也可能更好地使用namedItem } 或类似的东西;否则,如果您将它们用作item运算符的索引,您将获得内置方法length[]而不是您的元素。