Czy ktoś ma jakieś doświadczenie w zastępowaniu alert()
funkcji w JavaScript?
- Które przeglądarki obsługują to?
- Które wersje przeglądarki obsługują to?
- Jakie są niebezpieczeństwa związane z nadpisaniem funkcji?
javascript
overriding
cllpse
źródło
źródło
_alert
jako rodzaj temp ekspandowania w pierwszej instancji.Odpowiedzi:
To zdecydowanie „obsługiwane”. To twoja strona internetowa, robisz z nią, co chcesz.
Zrobiłem to już w celu śledzenia zdarzeń analitycznych bez modyfikowania biblioteki, ale wkradając się do zdarzeń.
Użyj wzorca proxy:
Możesz także pominąć wywołanie oryginalnej funkcji, jeśli chcesz (proxy)
Więcej informacji tutaj: Typy JQuery #Proxy Pattern
źródło
apply()
nie jest dostępnywindow.alert
w przeglądarce Internet Explorer 8.apply
jest metodąFunction
obiektu. Więc muszą to wyraźnie ograniczyćalert
?Chociaż większość przeglądarek obsługuje nadpisywanie go, należy zachować ostrożność przy wykonywaniu tego.
Ponieważ domyślne okno alertu blokuje wątek wykonania, niektóre biblioteki korzystające z tego zachowania mogą już nie działać (w najlepszym wypadku).
Powinieneś być dobrym obywatelem i unikać dotykania natywnego API. Jeśli to zrobisz, możesz zepsuć się podczas korzystania z kodu innej firmy.
Jeśli jednak chcesz przedefiniować zachowanie alertu w określonym kontekście, możesz dołączyć go do anonimowej funkcji, takiej jak ta:
źródło
Nie ma żadnych zagrożeń w funkcji ostrzegania Overring. Każda przeglądarka to obsługuje.
na przykład:
źródło
alert("Reloading")
a następnie ładuje stronę ponownie. Tekst ostrzeżenia może nigdy nie być widoczny dla użytkownika.Myślę, że każda implementacja Javascript będzie w stanie to obsłużyć i nie wiąże się z tym żadne niebezpieczeństwo. Często robi się to, by zastąpić zwykłe skrzynki alarmowe w stylu systemu operacyjnego czymś bardziej eleganckim dzięki HTML / CSS. Zrobienie tego w ten sposób oznacza, że nie musisz zmieniać istniejącego kodu! Fakt, że jest to możliwe, sprawia, że JavaScript jest niesamowity.
źródło
Jak powiedziano w wielu innych odpowiedziach, możesz po prostu zastąpić funkcję za pomocą
lub
nie musi to jednak zastępować funkcji prototypu
Window
konstruktora (zwróć uwagę na kapitałW
), więc haker może nadal pisać:dlatego należy również zastąpić tę funkcję za pomocą:
lub
źródło
Ladislav.
W przypadku IE8 można przedefiniować alert () w ten sposób
i zadzwoń jako
źródło
Moje doświadczenie z nadpisywaniem funkcji alert () jest takie, że kiedyś użyliśmy jej do „zhakowania” wersji próbnej biblioteki JavaScript, która wyświetlała „Proszę się zarejestrować!” od czasu do czasu wyświetlać powiadomienia.
Właśnie zdefiniowaliśmy naszą własną funkcję alert () i voila.
To było tylko w celach testowych, później kupiliśmy pełną wersję, więc nic niemoralnego się tu dzieje ;-)
źródło
Wszystkie implementacje JavaScript we współczesnych przeglądarkach obsługują nadpisywanie.
Niebezpieczeństwa polegają po prostu na tym, że doprowadzisz innych członków zespołu do szaleństwa, zastępując powszechnie znane funkcje, takie jak alert ().
Więc jeśli nie zastępujesz funkcji jako narzędzia do debugowania lub hakowania istniejącego kodu w jakiś sposób, nie widzę żadnego powodu, aby to robić. Po prostu utwórz nową funkcję.
źródło
Z pewnością działa w Firefoxie i ie8. Nie widzę, by istniała jakakolwiek przeglądarka, w której by nie działała. Jest to podstawowa zasada działania javascript, nawet jeśli często nie widzi się go używanego z takimi funkcjami natywnymi =)
źródło
Szybki hack, który robię, aby dowiedzieć się, skąd pochodzą alerty, to przejście do konsoli, a następnie wprowadzenie tego
źródło
Jeśli chodzi o funkcje przeglądarki js,
window.alert
jest ona najważniejsza i najbardziej znana, ludzie, którzy nie wiedzą, js wiedząalert()
- bądź pewien, że jest obsługiwany we wszystkich przeglądarkach, które są obecnie używane, a także fragment kodu. Jednak nie zastąpiłbym (cóż, to bardziej przypomina refaktoryzację niż zastąpienie w sensie OOP)alert()
dla konkretnego przypadku użycia jako twojego, ponieważ kiedy faktycznie potrzebujesz użyćalert()
bez szablonu i prawdopodobnie tak będzie, będziesz potrzebować kolejna funkcja niezwiązana z alertem.źródło
Spotykałem się z wymogiem pokazania domyślnego komunikatu wraz z faktycznymi komunikatami ostrzegawczymi. W ten sposób udało mi się to zrobić.
Przetestowałem to na chromie. Nie jestem pewien, czy to dobra praktyka, ale służy temu celowi.
źródło