Ich versuche herauszufinden, wie man einen Event-Emitter von meinem Skript "greasemonkey" hört, aber ich bekomme immer Zugriffsverletzungsfehler (Permission denied to access object
).Ich höre auf ein Ereignis von meinem Skript "greasemonkey"
Seite
Die Seite enthält ein einfaches Ereignis-Emitter:
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
Dieser eine Zugriffsverletzung Fehler führt (dies verwendet vor einer Weile zu arbeiten, aber ich denke, es gepatcht wurde oder etwas):
unsafeWindow.test.on('test', function(data){
console.log(data);
});
Haben Sie '// @grant unsafeWindow' im Benutzermetablock? – wOxxOm
@wOxxOm Ja. unsafeWindow funktioniert gut. – Rai
Versuchen Sie, die Funktion in einen unsicheren Kontext zu exportieren: 'unsafeWindow.test.on ('test', exportFunction (function (data) {....}))' – wOxxOm