Я пытаюсь выяснить, как слушать излучателя события из моего сценария greasemonkey, но я продолжаю получать ошибки нарушения доступа (Permission denied to access object
).Прослушивание события из моего сценария greasemonkey
Page
страница содержит простой излучатель событий:
var emitter = function(){
this.events = {};
}
emitter.prototype.on = function(eventName, closure){
this.events[eventName] = this.events[eventName] || [];
this.events[eventName].push(closure);
};
emitter.prototype.emit = function(eventName, data){
if(this.events[eventName]){
this.events[eventName].forEach(function(fn){
return fn(data);
});
}
}
var test = new emitter();
test.emit('test', {data:'test'});
Script
Это выдает сообщение об ошибке нарушения прав доступа (это используется для работы некоторое время назад, но я предполагаю, что это был исправлен или что-то еще):
unsafeWindow.test.on('test', function(data){
console.log(data);
});
У вас '// @grant unsafeWindow' в метаблоке пользователя? – wOxxOm
@wOxxOm Да. unsafeWindow работает просто отлично. – Rai
Попробуйте экспортировать функцию в небезопасный контекст: 'unsafeWindow.test.on ('test', exportFunction (функция (данные) {....}))' – wOxxOm