Küçük bir krom uzantısı yaparken, bir ek sorun ile aynı sorunu yaşadım: Bazen, sayfa değişikliği ancak URL değil.
Örneğin, Facebook Ana Sayfasına gidin ve 'Ana Sayfa' düğmesine tıklayın. Sayfayı yeniden yükleyeceksiniz ancak URL değişmeyecek (bir sayfalık uygulama stili).
Zamanın% 99'u, bu etkinlikleri Angular, React, Vue vb.Gibi Çerçevelerden alabilmemiz için web siteleri geliştiriyoruz.
AMA , benim bir Chrome uzantısı (Vanilla JS'de) durumunda, genellikle URL değişti tarafından yakalanabilecek her "sayfa değişikliği" için tetikleyecek bir olay dinlemek zorunda kaldım, ancak bazen değişmez.
Ev yapımı çözümüm şuydu:
listen(window.history.length);
var oldLength = -1;
function listen(currentLength) {
if (currentLength != oldLength) {
// Do your stuff here
}
oldLength = window.history.length;
setTimeout(function () {
listen(window.history.length);
}, 1000);
}
Temelde pencere geçmişine uygulanan leoneckert çözümü, bir sayfa tek bir sayfa uygulamasında değiştiğinde değişecektir.
Roket bilimi değil, bulduğum en temiz çözüm, burada sadece tamsayı bir eşitliği kontrol ettiğimizi ve daha büyük nesneleri veya tüm DOM'yu değil.