Próbuję zrobić Proxy
object z Image
, aby przechwycić właściwości, ale nawet przy pustym module obsługi pojawia się komunikat o błędzie.Obiekt proxy nie może zostać dodany do DOM (pułapki też się nie uruchamiają)
TypeError: Argument 1 of Node.appendChild does not implement interface Node.
Obiekt proxy ma działać jako obiekt docelowy, więc trochę mnie to zaskakuje. O ile rozumiem, powinieneś być w stanie to zrobić również z DOM nodes (?).
także: Nie mogę rozpocząć ładowanie obrazu i mieć program obsługi onload
wyzwalane, gdy ustawienie właściwości src
.
Jak powinienem używać proxy, aby móc "przejąć" na przykład właściwość "src", a poza tym działać jak zwykły obiekt obrazu?
Mój kod
'use strict';
//--- normal image use ---
var imgNormal = new Image();
imgNormal.onload = function(){
console.log('Normal loaded OK');
document.body.appendChild(imgNormal);
};
imgNormal.src = 'https://i.imgur.com/zn7O7QWb.jpg';
//--- proxy image ---
var imgProxy = new Proxy(Image, { // I also tried with 'new Image()' and HTMLImageElement
set: function(a,b,c,d){
console.log('set '+b);
return Reflect.set(a,b,c,d);
}
});
imgProxy.onload = function(){
console.log('Proxy loaded OK');
document.body.appendChild(imgProxy);
};
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';
document.body.appendChild(imgProxy); // double-up to demo error
Aktualizacja: Dzięki @Harangue! używając " teraz nie jestem w stanie przechwycić ustawienia właściwości. Wydaje się, aby ignorować pułapki całkowicie - przykład:new
" (bah ..) z pewnością uczyniłem obiekt proxy, ale
var proxy = new Proxy(Image, {
set: function(a,b,c,d){
console.log('set '+b); // doesn't show
return Reflect.set(a,b,c,d);
}
});
var imgProxy = new proxy();
imgProxy.onload = function(){
console.log('Proxy loaded OK');
document.body.appendChild(imgProxy);
};
imgProxy.src = 'https://i.imgur.com/zn7O7QWb.jpg';
Jak mogę pułapka ustawienie nieruchomość przy pomocy ważnego pełnomocnictwa?
Aktualizacja 2 Z drugiej strony - z wykorzystaniem new
z nowego proxy tylko wydają się używać oryginalnego konstruktora . Wszystkie przykłady mogę znaleźć robi nie używać nowego:
var myProxy = new Proxy(.., ..); // should suffer
Korzystanie następnie na szczycie tej new myProxy()
tylko wydają się używać oryginalnego konstruktora, który nie jest to, co chcę, ponieważ ignoruje pułapek.
var proxy = new Proxy(Image, {}); //should be sufficent??
var proxy2 = new proxy();
console.log(proxy2); //-> says Image (not proxy..)
Pułapki wydają się działać w moich pierwszych prób, ale pełnomocnik nie zachowuje się zgodnie z oczekiwaniami. To jest takie mylące i takie nowe. Zadowoleni za wszelkie informacje, jak można je rozwiązać (pułapki i zachowanie).
Ach tak, ja rzeczywiście zapomnieć nowego słowa kluczowego. ALE, teraz jest nowy problem, ponieważ nie mogę pułapki ustawienia. Czy przeoczyłem tu inną rzecz? zaktualizowałem odpowiedź, podając nowy przykład dla tej sprawy. Dzięki! – bjanes
OTOH .. po przestudiowaniu przykładów nie wydaje się, że jest to powszechny sposób używania proxy. Mam na myśli, wydaje się, że nowy Proxy (...) powinien wystarczyć. Czy jesteś pewny co do potrzeby "nowego"? Wydaje się, że używa on konstruktora obrazu bez przechodzenia przez serwer proxy. ale mogłem źle zrozumieć. :/ – bjanes
@ bjanes Kiedy używam tego kodu, otrzymuję komunikat konsoli, gdy ustawione jest 'src'. Szukasz innego zachowania? – Harangue