用于自动选择值的JavaScript在Firefox控制台中有效但在Greasemonkey脚本中无效吗?

时间:2014-03-30 01:14:40

标签: javascript jquery iframe greasemonkey

我只想自动选择表单中的值。

以下代码适用于Firebug或Firefox控制台,但它们不适用于Greasemonkey用户脚本:

document.getElementsByTagName('iframe')[2].contentWindow.document.getElementById("CDYN_126").value=1;

或者:

window.frames["WA2"].document.getElementById("CDYN_126").value = 1;

我还尝试了setTimeoutwaitForKeyElements,但没有任何效果。

这就是我尝试waitForKeyElements的方式:

function deneme.(){
    $("#WA2").contents().filter("#CDYN_126").val('1');
}

waitForKeyElements ("#WA2", deneme);


相关的,呈现的HTML 如下所示:

<iframe scrolling="no" name="WA2" id="WA2" class="SCPIFRAMEMozilla">
    ...
    <select class="COMBOFIXSelectEdit" name="CC" id="CDYN_126" tabindex="1">
        <option value="0"></option>
        <option value="1">Ithal Ürün</option>
        <option value="2">Yerli Ürün</option>
        <option value="3">Güncellenecek</option>
    </select>
    ...
</iframe>


我做错了什么?

2 个答案:

答案 0 :(得分:0)

控制台具有提升的权限,包括访问不必与父页面位于同一源的子框架。

然而,

用户脚本没有该特权,因此无法访问iframe的内容,除非它来自相同的协议,主机名和端口号。

您应该在控制台中看到一条错误消息,告诉您。

答案 1 :(得分:0)

脚本没有等待加载iframe,而不是waitForKeyElements() with an iframe的使用方式。

the waitForKeyElements.js source page开始,参数为:

selectorTxt,    /* Required: The jQuery selector string that
                    specifies the desired element(s).
                */
actionFunction, /* Required: The code to run when elements are
                    found. It is passed a jNode to the matched
                    element.
                */
bWaitOnce,      /* Optional: If false, will continue to scan for
                    new elements even after the first match is
                    found.
                */
iframeSelector  /* Optional: If set, identifies the iframe to
                    search.
                */


您需要指定iframeSelector

根据问题代码,像这样的完整脚本将起作用:

// ==UserScript==
// @name     Site X, Auto-select imported products
// @include  http://YOUR_SERVER.COM/YOUR_PATH/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
    introduced in GM 1.0.   It restores the sandbox.
*/

waitForKeyElements ("#CDYN_126", deneme, false, "#WA2");

function deneme (jNode) {
    jNode.val ('1');
}