我正在创建一个Greasemonkey脚本,以便在我们的在线票务系统中自动设置一些选项,以便使日志记录调用更有效。使用Greasemonkey脚本在框架中调用函数
无论如何,记录呼叫的屏幕是由多个帧组成的,在自动化方面我只感兴趣一个。为页和框架(包括我想编辑的元素)的剥离下来的HTML显示如下:
<html>
<head>
</head>
<frameset framespacing="0" border="0" bordercolor="#ffffff" rows="130,*,22,0">
<frame scrolling="no" marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" noresize="" src="top.asp?menu=&page=" name="menu">
</frame>
<frameset id="contentCols" framespacing="8" border="8" cols="250, *" bordercolor="#ffffff">
<frame marginwidth="0" marginheight="0" leftmargin="0" topmargin="0" border="0" src="../service/loading.html" name="content" frameborder="0" style="padding-right: 10px;">
<html>
<head>
</head>
<body class="winBack" style="background-color: rgb(255, 255, 255);">
<div id="scrollableContainer" class="lockedTableContainer scrollableContainerHeight" style="position: relative; height: 0px;">
<table cellspacing="1" cellpadding="3" border="0">
<form id="configFields" name="configFields" method="post" action="/ics/tt/ticketNew.asp"></form>
<input type="hidden" value="" name="task">
<input type="hidden" value="account" name="source">
<tbody>
<tr id="ROW_109094">
<td class="webCaption" style="width: 160px;">
</td>
<td class="formText">
<select id="FIELD_109094_DROPDOWN_null" class="formText" style="width: 200px;" title="Establishment Type" name="FIELD_109094_DROPDOWN_null" onchange="updateDep(109094, this.options[this.selectedIndex].value);">
</select>
</td>
</tr>
</tbody>
<table>
</div>
</frame>
</frameset>
</frameset>
</html>
我所试图做的是设置FIELD_109094_DROPDOWN_null
选择元素的selectedIndex
。
然后,我试图运行连接到该元素的change事件的updateDep
函数(该函数包含在附加到框架的脚本中);此功能根据select元素中当前设置的值显示某些其他字段。
用Firebug的控制台,我可以做到这一点使用下面两行:
frames["content"].document.getElementById("FIELD_109094_DROPDOWN_null").selectedIndex = 2;
frames["content"].updateDep(109094, frames["content"].document.getElementById("FIELD_109094_DROPDOWN_null").options[2].value);
然而,当我把它变成的Greasemonkey脚本,并将其安装到任何主窗口的onload,或帧的onload;我得到这个错误:
Error: frames.content.document.getElementById("FIELD_109094_DROPDOWN_null") is null
如果我用,下面的代码但是,我至少可以改变选择元素的选择指标:
document.getElementById("FIELD_109094_DROPDOWN_null").selectedIndex = 2;
我无法弄清楚如何通过运行updateDep
功能Greasemonkey脚本。脚本中的代码如下所示:
// ==/UserScript==
var initElements = (function() {
var elementExists = document.getElementById("FIELD_109094_DROPDOWN_null");
if(elementExists)
{
document.getElementById("FIELD_109094_DROPDOWN_null").selectedIndex = 2;
frames["content"].updateDep(109094, frames["content"].document.getElementById("FIELD_109094_DROPDOWN_null").options[2].value);
}
}
)();
window.addEventListener('load', initElements, false);
任何帮助将不胜感激。
嘿布洛克,这个完美工作,谢谢我真的很感激。 – achillesminor 2012-01-11 10:32:34
不客气。乐意效劳。 – 2012-01-11 12:36:20