Запустить функцию onchange из сценария Greasemonkey или Tampermonkey?

Я создаю скрипт в Greasemonkey, который изменяет тег выбора при нажатии на кнопку. Однако текущий выбор уже имеет параметр 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, что и происходит прямо сейчас.

Любые идеи?


person Xero Kael    schedule 30.01.2014    source источник
comment
В дополнение к приведенным ниже ответам здесь есть гораздо больше информации: вызов функций javascript веб-сайтов"> stackoverflow.com/questions/5006460/   -  person Wayne    schedule 31.01.2014


Ответы (2)


хак определения местоположения — это безопасный и простой способ выполнить функцию, определенную на странице:

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

Это очень похоже на запуск букмарклета из скрипта Greasemonkey, поэтому он идеально подходит для скриптов, которым нужно ссылаться только на несколько вещей со страницы. А поскольку URL-адреса javascript: всегда выполняются в области содержимого, у этого метода нет проблем с безопасностью, связанных с использованием unsafeWindow.

person Wayne    schedule 30.01.2014
comment
Большое спасибо! Это сработало!!! - person Xero Kael; 31.01.2014
comment
Один вопрос, если у меня есть другая функция JS, такая как: fr/?cf54ca256fc42061#/EIn/ как бы вы это назвали? Я все еще очень новичок в JS и пытаюсь во всем разобраться: S - person Xero Kael; 31.01.2014
comment
Я думаю, что функция для вызова будет: AJAXTableCompleter(gel('sys_display.incident.cmdb_ci'), 'incident.cmdb_ci', 'company', 'true'); но это все еще вызывает у меня головную боль - person Xero Kael; 31.01.2014
comment
в chrome я получаю эту ошибку: Uncaught TypeError: window.onChange не является функцией - person james turner; 03.03.2016

Так как это для Greasemonkey и/или Tampermonkey, вы можете использовать unsafeWindow. НАПРИМЕР:

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


В противном случае рекомендуется вставить код скрипта.

person Brock Adams    schedule 30.01.2014