доступ скрипта содержимого к веб-странице js

Я создаю дополнение Firefox с помощью онлайн-конструктора дополнений. Как можно использовать существующую функцию на веб-странице из аддона? Этот сайт мне не принадлежит, поэтому я не могу привязать прослушиватели событий, чтобы отправить на него событие из своего аддона.

Обновление: теперь у меня есть этот код, но он не работает:

main.js

var widgets = require("widget");
var tabs = require("tabs");
var data = require("self").data;


var widget = widgets.Widget({
  id: "transfer",
  label: "Transfer",
  content: "Transfer",
  width: 100,
  onClick: function() {
    tabs.activeTab.attach({
      // native implementation of window.confirm will be used
      contentScriptFile: data.url("new.js")
    });
  }
});

новый.js:

function foo()
{
    call(); // function in webpage

}
unsafeWindow.foo();

person Community    schedule 13.01.2012    source источник


Ответы (1)


Вы вводите сценарий содержимого на страницу (например, через пакет page-mod) и вызываете unsafeWindow.foo() в сценарии содержимого, чтобы вызвать функцию foo() из сценария содержимого. См. документации для получения дополнительной информации. Обязательно прочтите предупреждения: вы полагаетесь на то, что функция веб-страницы будет вести себя так, как вы ожидаете, но это может быть не так. В частности, если функция что-то возвращает, и вы хотите обработать этот результат, вы можете непреднамеренно создать брешь в безопасности.

person Wladimir Palant    schedule 13.01.2012
comment
@tasaras: Хех, ты должен написать unsafeWindow.call()... - person Wladimir Palant; 15.01.2012
comment
Я сделал это, но он говорит: в TypeError unsafeWindow.call не является функцией, функция на странице - это функция call(){alert(asd);} она отлично работает с unsafeWindow.alert(asd) - person ; 15.01.2012
comment
@tasaras: Конечно, ошибка в вашем коде. Чтобы вызвать функцию call(), эта функция должна быть фактически определена на веб-странице... - person Wladimir Palant; 18.01.2012
comment
спасибо, моя функция была внутри jquery ready() и не смогла ее найти - person ; 18.01.2012