2

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

基本上有一个我们在工作中使用的网站,它需要大量重复输入,所以我试图制作一点 JavaScript 来自动将文本放入一些网站字段。我打算通过制作运行 JavaScript 代码的书签来实现这一点,这样我就可以根据需要创建几个不同的书签。

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

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

不过,这就是我感到困惑的地方,如果我检查元素并实际看到我要查找的确切元素,或者当我从与它相同的区域查看任何源(我是试图找到的是在一个大的 iFrame 中)。如果我只查看基本源,它仍然无法工作。

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

我现在通过将代码粘贴到 Chrome 上的控制台来运行代码,所以当我尝试运行 JavaScript 时,一切都加载得很好。

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

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

4

1 回答 1

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>

参考

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

于 2016-08-14T04:31:17.407 回答