Вызов функции Javascript из XPCOM, C ++ - PullRequest
3 голосов
/ 10 ноября 2009

Моя цель состоит в том, чтобы перехватить загрузки страниц в моем компоненте, вставить некоторый javascript в документ и затем перехватить события onFocus. В случае события я хочу вызвать функцию javascript, которую я ввел.

Теперь мне удалось решить большинство проблем, у меня есть скрипт, добавленный ко всем веб-страницам, и я могу ловить события onfocus. Что я не могу сделать, так это выполнить функцию javascript из моего компонента XPCOM (C ++). В моем Internet Explorer BHO я использую execScript, и он прекрасно работает. Есть идеи?

В настоящее время мой обходной путь - использовать setattribute и установить событие onfocus каждого входного элемента для выполнения функции javascript, но это навязчиво и перезаписывает существующие обработчики onFocus на веб-странице. Другие идеи приветствуются.

Спасибо.

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

Если у вас «сценарий добавлен на все веб-страницы», сценарий может позаботиться как о регистрации слушателя события «focus», так и о соответствующих действиях, когда происходит событие focus.

Я не уверен, почему вам нужно вызывать контент JS из вашего компонента.

Если вам нужно это сделать, опубликуйте то, что вы уже пробовали и каким образом это «не сработало».

0 голосов
/ 05 февраля 2014

Я полагаю, это раньше решало вашу проблему (до FF6?), Я ищу новое решение. В FF6 были внесены некоторые изменения в безопасность панели навигации, что препятствовало выполнению там javascript. https://support.mozilla.org/en-US/questions/876916

Где выполнить Java-скрипт, URL может быть javascript:alert('hello');

OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) {
  // check for correct state - document load complete...
  nsCOMPtr<nsIDOMWindow> domWin;
  nsresult rv = aWebProgress->GetDOMWindow(getter_AddRefs(domWin));

  nsCOMPtr<nsIWebNavigation> nav = do_GetInterface(domWin);
  if (nav)
    hr = nav->LoadURI(url, 0, 0, 0, 0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...