document.getElementsByName返回NULL,除非我查看HTML源代码

时间:2016-08-14 02:37:10

标签: javascript iframe getelementbyid getelementsbyname

这似乎是一个简单的问题,但我无法解决这个问题。

基本上我们在工作中使用的网站需要大量重复输入,因此我尝试制作一些JavaScript,自动将文本放入某些网站字段中。我打算通过制作运行JavaScript代码的书签来实现这一目标,因此根据我的需要,我可能会有一些不同的代码。

问题是每当我这样做时它只会出错,因为它在getElementsByName上返回NULL:

document.getElementsByName("user_name")[0].value=("Type Username Here");

在这里,我感到困惑,如果我检查元素并实际看到我试图找到的确切元素,或者当我查看来自的任何来源时,它将完美地工作与它相同的区域(我试图找到的是一个大的iFrame)。如果我只查看基本来源,它仍然无法工作。

我也尝试使用具有完全相同问题的document.getElementById

我现在通过将代码粘贴到Chrome上的控制台来运行代码,因此当我尝试运行JavaScript时,所有内容都已正常运行。

如果有人有任何建议,我们将不胜感激。

TL; DR:除非我查看HTML源代码,否则JavaScript无法正常工作。

1 个答案:

答案 0 :(得分:1)

  

我想要找到的是一个大的iFrame

从父页面(具有iframe的页面)访问元素到子页面(iframe中显示的页面)的关键部分基本上是:

bigIframe.contentWindow.document.getElementById('user_name')

但是为了构建这一点,还需要考虑一些额外的代码。 Plunker是一个现场演示,Snippet包含关键部分。

PLUNKER



  <form id='form1' name='form1' action='' method='post' target='bigIframe'>
    <input id='inData' name='inData'>
    <input id='btn1' type='submit'>
<!--iframe points to a blank because Snippet will not function correctly as a full functioning iframe for secrity reasons-->
    <iframe id='bigIframe' name='bigIframe' src='about:blank' width='400' height='300'></iframe>
  </form>

<script>
  var form1 = document.getElementById('form1');

  form1.addEventListener('submit', function(e) {
    e.preventDefault();
    var bigI = document.getElementById('bigIframe');
    var data = document.getElementById('inData').value;
    var iUser = bigI.contentWindow.document.getElementById('user_name');
    iUser.value = data;
  }, false);
</script>
&#13;
&#13;
&#13;

参考

https://developer.mozilla.org/en-US/docs/Web/API/HTMLIFrameElement/contentWindow

相关问题