【问题标题】:Enter an input value with greasemonkey使用greasemonkey 输入一个输入值
【发布时间】:2012-05-25 09:39:45
【问题描述】:

我有一些输入值包含在一堆 div 和一个表单中。我对js的了解有限,想在页面加载时使用greasemonkey来设置值。

下面显示了 div 和表单获取值的顺序。

<div data-role="page" id="finalTest">                    
  <div data-role="content">
    <form class="cmxform" id="ftForm">
      <div id="finalTestForOtherDiv" >
        <div data-role="fieldcontain" class="special-spacing">
                <div class="input-div">
                    <label id="finalTestBeforeAcTgrLabel" for="finalTestBeforeAcTg" data-insight="true" 
                        class="mandatory" data-default="mandatory"><img class="label-image" alt="" src="../Images/icon-alert.png" />AC V (T/G):</label>
                    <input type="text" id="finalTestBeforeAcTg" name="finalTestBeforeAcTg" value="" style="width:100px; display:inline-block;" 
                        data-bind="binder.BeforeAcTg"  data-bind-action-when-hidden="Ignore" />
                    <span class="ui-content" style="padding-left:7px;">V</span>
                    <div class="error-message"><ul></ul></div>

                </div>

这是我尝试使用但什么也没做的脚本。

// ==UserScript==
// @name    Final Test
// @description Final test results
// @include https://techaccess.ad.qintra.com/WorkJobs/WorkJobs.aspx#finalTest
// ==/UserScript==

document.getElementById("finalTestBeforeAcTg").value = "0.00";

【问题讨论】:

  • 这是我正在使用但不起作用的代码。

标签: greasemonkey


【解决方案1】:
document.getElementById("finalTestBeforeAcTg").value = "your value";

【讨论】:

  • 没想到这么简单,谢谢,我明天试试
  • 我试过了,还是不行。我已经编辑了我的原始帖子以显示我拥有的代码
  • 检查你的脚本是否执行。 document.getElementById("finalTestBeforeAcTg") 的值是多少?
  • 奇怪的是,我可以做 alert(document.getElementById("finalTestBeforeAcTg").value) 这将显示 0.00,但它没有正确填写文本框。输入框还是空的。
  • 我还在上面添加了更多的源 html,以表明我正在使用的整个部分是什么样的
【解决方案2】:

如果您的脚本尝试不起作用,可能是因为以下一项或多项:

  1. @include 过于严格。
  2. 节点还不存在。页面上的 AJAX 是否处于活动状态?
  3. 必须触发必要的 JavaScript 事件,页面才能确认或接受新值。

对于问题 1,将脚本更改为:

// ==UserScript==
// @name        Final Test
// @description Final test results
// @include     http://techaccess.ad.qintra.com/WorkJobs/*
// @include     https://techaccess.ad.qintra.com/WorkJobs/*
// ==/UserScript==

alert ("Script start.");

var finTestInput    = document.getElementById ("finalTestBeforeAcTg");
if (finTestInput) {
    finTestInput.value  = "0.00";
}
else {
    alert ("The target input does not exist yet!")
}

请注意,如果您使用 Firebug(您应该),请将 alert()s 更改为 unsafeWindow.console.log()s。


对于问题 2,使用 waitForKeyElements 实用程序。例如,请参阅this answer


对于问题 3,如果不访问该页面来确定正确的事件顺序,我们几乎无能为力。
让我们访问页面,或者使用 Firebug(和事件面板)来解决它,或者页面的 HTML 和页面的 JS 文件的快照,Pastebin.com 就足够了(也许)。

【讨论】:

  • 感谢您的反馈。不幸的是,问题不在于@include。我将尝试使用 waitForKeyElements。
  • 忘记回复分辨率。这是 AJAX 输入的数据的问题。我只使用了 1 秒超时。谢谢布洛克
猜你喜欢
  • 2017-03-25
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
相关资源
最近更新 更多