我只想自动选择表单中的值。
以下代码适用于Firebug或Firefox控制台,但它们不适用于Greasemonkey用户脚本:
document.getElementsByTagName('iframe')[2].contentWindow.document.getElementById("CDYN_126").value=1;
或者:
window.frames["WA2"].document.getElementById("CDYN_126").value = 1;
我还尝试了setTimeout
和waitForKeyElements
,但没有任何效果。
这就是我尝试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>
我做错了什么?
答案 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');
}