从Greasemonkey或Tampermonkey脚本运行onchange函数?

时间:2014-01-30 17:15:51

标签: javascript jquery greasemonkey tampermonkey

我正在Greasemonkey中构建一个脚本,在单击按钮时更改select标签。但是,当前选择已经有一个onChange选项可以更改子类别。

有没有办法让脚本运行呢?

HTML代码:

<select id="incident.category" name="incident.category" style=";width:160px;width:180px" onchange="onChange('incident.category');"><option value="">-- None --</option><option value="request" selected="SELECTED">Request</option><option value="incident">Incident</option><option value="informational">Informational</option></select>

我的代码:

document.getElementById("incident.category").value = "informational";
document.getElementById("incident.category").focus();
window.setTimeout(function ()
{
  document.getElementById("incident.subcategory").value = "informational-informational";
  document.getElementById("incident.subcategory").focus();
}, 1000);

如果该类别未触发onChange现在正在发生的事情,则不会出现子类别。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

由于这是Greasemonkey和/或Tampermonkey,您可以使用unsafeWindow。 EG:

document.getElementById("incident.category").value = "informational";
document.getElementById("incident.category").focus();
unsafeWindow.onChange('incident.category');
...


否则,首选方法是inject your script code

答案 1 :(得分:1)

location hack是一种安全简便的方法来执行页面中定义的功能:

location.assign("javascript:window.onChange('incident.category');void(0)");

这很像在Greasemonkey脚本中运行bookmarklet,因此它非常适合需要仅引用页面中的一些内容的脚本。并且,由于javascript:网址始终在内容范围内执行,因此此方法没有使用unsafeWindow带来的任何安全问题。