Автоматизация JavaScript / VBA: изменение атрибута onclick - PullRequest
3 голосов
/ 23 марта 2012

Я пытаюсь изменить вызов функции из события onclick кнопки на форме, используя автоматизацию в VBA. Функция X уже жестко запрограммирована на веб-странице, и у меня нет доступа для изменения этого кода. (Страница является внутренней для моей компании, но я не нахожусь в этом отделе).

Когда подходит мой сценарий, я хочу заменить функцию X новой функцией Y.

Мне кажется, подобные вопросы с этим SO, но, похоже, больше всего относятся к изменению атрибута элемента из кода JS. Моя проблема в том, что мне нужно сделать это в VBA, и я не уверен, как туда добраться.

Этот сайт содержит много информации об этом процессе (setAttribute, getAttribute и т. Д.), Включая полезную информацию о предостережениях при работе с одним браузером против другого. Весь мой код будет взаимодействовать с IE (что предоставляет компания), поэтому не нужно беспокоиться о других параметрах браузера.

При попытке изменить атрибут onclick на панели просмотра VBE отображается изменение атрибута, но оно ведет себя не так, как ожидалось. После того, как я изменил атрибут, ничего не происходит, когда я щелкаю (либо с помощью моей автоматизации objButton.Click / objButton.onclick, либо фактически вручную нажимая кнопку). Я также пробовал это на других атрибутах (то есть onfocus) с теми же результатами. Ссылка выше упоминает, что IE имеет некоторые трудности с этим, но я не слишком знаком с JavaScript, и у меня возникают проблемы с выполнением руководства.

Я попробовал следующее: все они имеют один и тот же результат.

Вариант 1:

Set TEST = myIEWindow.Document.createattribute("onclick")
TEST.nodevalue = "function anonymous() {alert(""test""); };"
objButton.setAttributeNode TEST

Вариант 2:

objButton.Attributes("onclick").value = "function anonymous() {alert(""test""); };"

Вариант 3:

objButton.Attributes("onclick").value = "alert(""test"");"

Вариант 4:

objButton.setAttribute "onclick", "alert(""test"");"

Вариант 5:

objButton.onclick = "function() { alert(""test""); };"

Испытывая эти разные методы, я заметил, что атрибут onclick type в окне наблюдения VBE из-за принудительного нажатия кнопки меняет свой первоначальный тип Variant / Object на Variant / String. чтобы вызвать новую функцию, и я чувствую, что это как-то связано с моей проблемой.

Может кто-нибудь объяснить, как (если возможно) я могу заставить это работать?

1 Ответ

1 голос
/ 23 марта 2012

Вы можете изменить это непосредственно в свойстве элемента.

var objButton = document.getElementById("buttonId");
objButton.onclick = function() { alert("test"); };
...