我試圖通過重新定義 Image/HTMLImage 物件的屬性來動態覆寫所有 IMG url 分配。它正確地攔截了分配,但是新的 URL 不起作用,而且它似乎完全破壞了 img 正常作業的能力。
這可能與其他定義屬性(例如突變觀察者)有關嗎?
(對于我的某些用例,分配 this.srcset=e; 效果很好,但很難看)
<html>
<body>
<script>
if(!window.once) {
window.once = 1;
Object.defineProperty(
Image.prototype,'src',{configurable: true
, get: function() {
console.log(this.__src);
return this.__src; }
, set: function(e) {
if(e.includes('replacemask')) {
e='rep.jpg';
}
this.__src=e; console.info('aaa:', e) } });
}
var x = new Image;
x.src="-.jpg";
document.body.append(x);
</script>
</body>
</html>
uj5u.com熱心網友回復:
您需要首先提取“原始”setter 和 getter 并自己呼叫它們:
// get the original descriptor
const desc = Object.getOwnPropertyDescriptor(HTMLImageElement.prototype, "src");
Object.defineProperty(
HTMLImageElement.prototype, "src", {
...desc,
get: function() {
console.log(this.__src);
// call the original getter
return desc.get.call(this);
},
set: function(e) {
if (e.includes('replacemask')) {
e = e.replace('replacemask', 'demonstration_1.png');
}
// get the original setter
desc.set.call(this, e);
console.info('aaa:', e)
}
});
var x = new Image;
x.src = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_replacemask";
document.body.append(x);
但是請注意,這不是更新 HTMLImageElement 的當前源的唯一方法。你有明顯的setAttribute,但也不太明顯的srcset情況<picture><source>。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/477056.html
標籤:javascript 图片
上一篇:在Julia中為影像制作框架
下一篇:如何在perform_create中使用Validator來限制DjangoRestFramework的影像上傳大小?
